C ++如何创建自动转换图?

Mak*_*gan 5 c++ generics types casting

假设我们有一个包含两个类别的对象C1和C2的库A。

对于C1中的每个元素,C2中都有一个兼容的元素。

假设我们要创建一个将一个函数转换为另一个函数的通用函数。

template<typename C1, typename C2> 
C2 SpecialCast(C1 c1) {
     /* do some generic work */
}
Run Code Online (Sandbox Code Playgroud)

这就要求我们总是写。SpecialCast<Type>(parameter)但这是多余的,因为要知道转换类型就需要知道参数类型。因此,这给代码增加了不必要的冗长性。

理想的解决方案是定义一个vallid类型转换的头表,这样就可以做到:

template<typename C1> 
C2 SpecialCast(C1 c1) {
     /*get C2 from C1 using the table*/
     /* do some generic work */
}
Run Code Online (Sandbox Code Playgroud)

但是我目前正在努力寻找一种以最简单的方式定义表的好方法。

Sam*_*hik 7

使用助手类来定义相应的类型。比方说图书馆有班A1A2A3,即得到浇铸B1B2B3。那好吧:

template<typename T> struct type_map;

template<> struct type_map<A1> {

   typedef B1 type_t;
};

template<> struct type_map<A2> {

   typedef B2 type_t;
};

template<> struct type_map<A3> {

   typedef B3 type_t;
};
Run Code Online (Sandbox Code Playgroud)

现在,SpecialCast可以简单地定义为

template<typename T> 
typename type_map<T>::type_t SpecialCast(T t) {
     /* do some generic work */
}
Run Code Online (Sandbox Code Playgroud)