2015-04-30 3 views
4

В шаблонах C++ существует концепция с явным спецификатором аргументов шаблона, что означает, что я могу заставить компилятор создать функцию шаблона данного типа. напримерМогу ли я заставить Variadic шаблон принять определенный тип аргумента

template <class T1, class T2> 

void foo(T1 t1prm, T2 t2prm) { 
    /* function body */ 
} 

foo<double, double>(1,2); 


Могу ли я сделать что-то подобное с VARIADIC функции шаблона? У меня нет конкретного варианта использования. Шаблоны Variadic новы для меня, и я просто пытаюсь понять возможности новой (ну, для меня) концепции.

ответ

6

Да.

template<typename... Args> 
void f(const Args&... args) 
{ 
} 

int main() 
{ 
    f<int>(1.0, 2, 3.0); 
} 

здесь будет называться функция f<int, int, double>.

Вы можете проверить это, как это

template<typename... Args> 
void f(const Args&... args) 
{ 
    using swallow = int[]; 
    (void)swallow{0, (std::cout << typeid(args).name() << std::endl, 0)...}; 
}