c – 有没有办法让模板接受多个值?
发布时间:2020-12-16 06:04:21 所属栏目:百科 来源:网络整理
导读:我写了这段代码,它现在可以接受一个void callback并传递一个值.但是,有没有办法让用户能够设置多个参数?也许像Callback Caller一样;而不是定义多个typenames而不是Callback?我可以把这一切都合并成一个typename吗? 例如,这是我的课 template typename Tcl
我写了这段代码,它现在可以接受一个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<> ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |