你如何重载可变参数模板函数?

时间:2014-12-14 23:26:06

标签: templates c++11

这些是模板类的成员函数:

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

我有两种功能:

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

问题在于,如果我没有为'Args ...'声明我的对象具有可变参数类型'即使我正在调用第二个函数,它也不会编译。为什么Args ......如果不使用它需要一个类型?模板生成器不应该意识到这一点吗?它要求开发人员传入一个类型(任何类型),尽管变量从未实际被触及。

示例代码:(忽略'作品')

http://pastebin.com/E1xsc6iS

http://pastebin.com/FxjVzuCm

1 个答案:

答案 0 :(得分: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