Правильный синтаксис для шаблонного конструктора, использующего параметры шаблона шаблона - PullRequest
2 голосов
/ 21 апреля 2011

Я пытаюсь расширить свое (ограниченное) понимание шаблонов классов на шаблоны классов с параметрами шаблонов.

Это объявление и конструктор работают нормально (ну, он компилируется):

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 Ответ

4 голосов
/ 21 апреля 2011

Попробуйте это

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

Аргумент шаблона для параметра шаблона шаблона должен быть name шаблона класса.Char2Type - это имя шаблона, тогда как Char2Type<char> - это идентификатор шаблона.Вы не можете использовать template-id вместо template-name в вашем примере.

Разница между именем шаблона и идентификатором шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...