假设我们有一个库 A,其中包含两类对象 C1 和 C2。
对于 C1 中的每个元素,在 C2 中都有一个兼容的元素。
假设我们要创建一个通用函数,将一个函数转换为另一个函数。
template<typename C1, typename C2>
C2 SpecialCast(C1 c1) {
/* do some generic work */
}
这需要我们一直写SpecialCast<Type>(parameter)
然而这是多余的,因为知道转换类型所需的只是知道参数类型。因此,这给代码增加了不必要的冗长。
理想的解决方案是定义一个有效类型转换的头表,这样就可以做到:
template<typename C1>
C2 SpecialCast(C1 c1) {
/*get C2 from C1 using the table*/
/* do some generic work */
}
但我目前正在努力寻找一种以最简单的方式定义表格的好方法。
最佳答案
使用辅助类来定义相应的类型。假设库有类 A1
、A2
和 A3
,它们被转换为 B1
、 B2
和 B3
。好的,那么:
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;
};
现在,SpecialCast
可以简单地定义为
template<typename T>
typename type_map<T>::type_t SpecialCast(T t) {
/* do some generic work */
}
关于C++如何创建一个自动转换图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452428/