c – 有没有办法让模板接受多个值?

我写了这段代码,它现在可以接受一个void callback并传递一个值.但是,有没有办法让用户能够设置多个参数?也许像Callback Caller一样;而不是定义多个typenames而不是Callback?我可以把这一切都合并成一个typename吗?

例如,这是我的课

template <typename T>
class Callback
{
private:
    std::vector<std::function <void (T)>> func;
public:
    virtual void operator += (std::function<void (T)> _func)
    {
        func.push_back(_func);
    }

};

我这样用:

Callback<int> Test;

如果我只想传递一个参数给我的函数,它的工作正常.但是,是否可以使用户能够定义多个值,而不会有多个typename?

Callback< <(int,int,int)> > Test;

类似的东西?

解决方法

在C 11中,使用可变模板:
template <typename... Ts>
//                ^^^^^^ Parameter pack
class Callback
{
private:
    std::vector<std::function <void (Ts...)>> func;
//                                   ^^^^^
//                                   Parameter pack expansion
public:
    virtual void operator += (std::function<void (Ts...)> _func)
//                                                ^^^^^
//                             Parameter pack expansion             
    {
        func.push_back(_func);
    }
};

现在你可以这样实例化你的课程:

Callback<int,int>
Callback<double,std::string>
Callback<bool>
Callback<>
...

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...