模板的模板typedef

时间:2011-02-15 08:18:39

标签: c++ templates

  

可能重复:
  C++ template typedef

我正在尝试通过预先专门化另一个模板来获取另一个模板的模板类型:

template<unsigned a, unsigned b, unsigned c>
struct test
{
    enum
    {
        TEST_X = a,
        TEST_Y = b,
        TEST_Z = c,
    };
};

template<unsigned c>
typedef test<0, 1, c> test01;

但是,在GCC 4.4.5上,我收到此错误:error: template declaration of ‘typedef’第二种类型(test01)。

我非常感谢指导,因为我不明白我的代码有什么问题。

2 个答案:

答案 0 :(得分:10)

C ++ 03不允许使用此语法。最近的解决方法是:

template<unsigned c>
struct test01
{
    typedef test<0, 1, c> type;
};

typedef test01<2>::type my_type;

在C ++ 0x中,我们可以这样做:

template<unsigned c>
using test01 = test<0, 1, c>;

答案 1 :(得分:2)

仅为了列出替代方案:

template <typename C>
struct test01 : test<0, 1, C> { };

test01<4> my_test014;

这确实创建了新的,不同的类型,而不仅仅是基本模板实例化的别名: - (。