使用模板模板参数的模板化构造函数的正确语法

时间:2011-04-21 18:25:10

标签: c++ templates

我正在尝试使用模板模板参数将对类模板的(有限)理解扩展到类模板。

这个声明和构造函数工作正常(好吧,它编译):

template < char PROTO >
class Test
{
public:
    Test( void );
    ~Test( void );
    void doIt( unsigned char* lhs, unsigned char* rhs );
};


template< char PROTO >
Test<PROTO>::Test( void )
{
} 

但是,当我尝试使用模板化模板参数做类似的事情时,我得到了这些错误(源于错误的行在下面):

error: missing ‘>’ to terminate the template argument list
error: template argument 1 is invalid
error: missing ‘>’ to terminate the template argument list
error: template argument 1 is invalid
error: expected initializer before ‘>’ token
template <char v> struct Char2Type {
enum { value = v };
};


template < template<char v> class Char2Type >
class Test2
{
public:
    Test2( void );
    ~Test2( void );
    void doIt( unsigned char* lhs, unsigned char* rhs );
};


template< template<char v> class Char2Type >
Test2< Char2Type<char v> >::Test2( void ) //ERROR ON THIS LINE
{
}

我正在使用gnu g ++。上面那行有什么问题?

1 个答案:

答案 0 :(得分:4)

试试这个

template< template<char v> class Char2Type >
Test2<Char2Type>::Test2( void ) 
{
}

模板模板参数的模板参数应为类模板的名称Char2Type是模板名称,而Char2Type<char>是模板ID。在您的示例中,您不能使用template-id代替template-name

Difference between template-name and template-id.