c++ - 反向模板别名

标签 c++ templates

我需要一些方法来实现“反向模板别名”。因此,我将使用模板 typedef 来选择要在编译时使用的正确类。我想执行以下操作:

typedef ClassA Temp<int>;
typedef ClassB Temp<char>;

ClassA 和 ClassB 不是模板类,但我想通过使用模板来选择正确的类。因此,如果需要 Temp,它实际上会使用 ClassA。在 C++ 中甚至可能有这样的事情吗?我尝试了以下但没有用。

template<>
typedef ClassA Temp<int>;

template<>
typedef ClassB Temp<char>;

我在 GCC 中遇到以下错误

error: template declaration of ‘typedef’

最佳答案

不,typedef不能定义类型模板,只能定义类型。您可以做的最接近的两件事是:

template <typename T>
struct Temp;

template <>
struct Temp<int> : ClassA {}

template <>
struct Temp<char> : ClassB {}

所以你只写Temp<int> , 但它是一个派生类,而不是类本身,或者

template <typename T>
struct Temp;

template <>
struct Temp<int> { typedef ClassA Type; }

template <>
struct Temp<char> { typedef ClassB Type; }

所以你可以获得ClassAClassB自己,但你必须写 Temp<int>::Type .

关于c++ - 反向模板别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201503/

相关文章:

c++ - 函数级静态变量何时分配/初始化?

javascript - 如何在循环的 django 模板中创建唯一的 javascript 变量名?

c++ - 将 int(C::*)(int, char) 类型转换为 int(int, char) 类型

c++ - 测试 mini Matrix ADT 时的核心转储

c++ - 来自元组的构造函数参数

c++ - 使用 JIT 设计虚拟机

c++ - 确定数组索引到哪个数组被填充?

c++ - auto 如何决定变量的类型?

c++ - 模板定义中的友元函数

c++ - "bind directly"在引用初始化中是什么意思?