2014-09-22 3 views
3

Я определяю VARIADIC-структуру как такVARIADIC структура спецификации

template <class T, class... TRest> 
struct Opa 
{ 
    Opa() 
    { 
     std::cout << "Mutiple-arguments template"; 
    } 
}; 

и хочу специализироваться его для случая с 1 аргументом только в следующем

template <> 
struct Opa<class T> 
{ 
    Opa() 
    { 
     std::cout << "One-argument template"; 
    } 
}; 

но компилятор просто игнорирует эту вторую-структуру, и выход от

Opa<int> opa; 
Opa<int, int> opa_opa; 

является Mutiple-arguments template, Mutiple-arguments template.

Указание шаблона с одним аргументом по-разному, например.

template <class T> 
struct Opa 
{...} 

привел к ошибке компиляции. Я понимаю, что мой вопрос довольно прост, но googling не помогло. Так что, пожалуйста, не бросайте на меня гнилые помидоры, и спасибо за ответы.

+0

Где ваш вариационный шаблон? –

ответ

7

Ваш синтаксис для специализации с одним аргументом неверен. Вероятно, вы полностью специализируетесь на том, чтобы на месте было объявлено class T. Вы хотели этого:

template <class T> 
struct Opa<T> 
{ 
    Opa() 
    { 
     std::cout << "One-argument template"; 
    } 
}; 

Live example

Частичные специализации объявлены перечислением параметров частичной специализации в угловых скобках после template (в вашем случае, один параметр типа, class T), и перечисляя аргументы для основного шаблона в угловых скобках после имени основного шаблона (в вашем случае аргумент одного типа, T).

Смежные вопросы