我需要一些方法来实现“反向模板别名”。所以我使用模板typedef来选择在编译时使用的正确类。我想做以下事情:
typedef ClassA Temp<int>;
typedef ClassB Temp<char>;
ClassA和ClassB不是模板类,但我想通过使用模板来选择正确的类。因此,如果温度&lt; int&gt;需要它实际上会使用ClassA。在C ++中甚至可以这样吗?我尝试了以下但是没有用。
template<>
typedef ClassA Temp<int>;
template<>
typedef ClassB Temp<char>;
我在GCC中遇到以下错误
error: template declaration of ‘typedef’
答案 0 :(得分:2)
不,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; }
所以你可以自己获得ClassA
和ClassB
,但你必须写Temp<int>::Type
。