反向模板别名

时间:2011-08-26 07:43:57

标签: c++ templates

我需要一些方法来实现“反向模板别名”。所以我使用模板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’

1 个答案:

答案 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; }

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