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

标签 c++ generics types casting

假设我们有一个库 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 */
}

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

最佳答案

使用辅助类来定义相应的类型。假设库有类 A1A2A3,它们被转换为 B1 B2B3。好的,那么:

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/

相关文章:

c - 哪个说明符用于打印 long double 的最大/最小值?

haskell - 约束数据类型

c++ - SDL_TTF 绘图 int 到字符串内存泄漏?

c++ - 如何为一系列整数值专门化 C++ 模板?

android - 如何修复编译 smartass Governor 时初始化程序中指定的未知字段 'suspend'?

php - int 转成decimal 数据类型的过程?

c++ - 如何从移动捕获 lambda 表达式创建 std::function?

c++ - 无法创建模板 vector 迭代器

java - 通过传递通用参数获取 ArrayList 中的项目索引

swift - 在通用元类型函数中返回具有特定元类型的对象