2014-12-14 2 views
-1

Эти функции-члены класса шаблона:Как вы перегружаете функцию вариационного шаблона?

template<class Function_T, class Data_T,typename... Args> 

У меня есть twotemplate функции:

void execute(Data_T&, Args&...); 
void execute(Data_T&); 

Проблема заключается в том, что если я не объявляю свой объект с VARIADIC типа для «Args. .. 'ДАЖЕ, если я вызываю вторую функцию, она не будет компилироваться. Почему Args ... нужен тип, если он не используется? Разве этот генератор шаблонов не должен это понимать? Это требует, чтобы разработчик передавал тип (любой тип), несмотря на то, что переменная никогда не была затронута.

Пример кода: (игнорировать 'работы')

http://pastebin.com/E1xsc6iS

http://pastebin.com/FxjVzuCm

+0

У вас есть полный нерабочий пример? [Вот рабочая версия вашего кода] (http://coliru.stacked-crooked.com/a/17310b106e7c1c48) – quantdev

+0

Покажите нам полные подписи, включая 'template'. –

+0

@quantdev Возможно, потому что это в классе шаблона. Я вызываю ref (args ...) в том, который принимает sin args, но не в другом. – user3816764

ответ

1

Добавить частичную специализацию для своего класса, для случая отсутствия Args:

template<class Data_T,typename... Args> 
class tclass 
{ 
public: 
    // Two overloads 
    void example(Data_T&, Args&...); 
    void example(Data_T&); 
}; 

template <class Data_T> 
class tclass<Data_T> 
{ 
public: 
    // One overload 
    void example(Data_T&); 
}; 

Live example

+0

Реализован, и это сработало, спасибо. – user3816764

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