可变参数模板(带有类和函数)无法编译
Posted
技术标签:
【中文标题】可变参数模板(带有类和函数)无法编译【英文标题】:variadic template (with class and funtion) fails to complie 【发布时间】:2019-07-16 06:51:13 【问题描述】:我需要实现一个自注册功能,我想获取参数。好的,我的描述不清楚,这是我的代码。
#include <vector>
template<typename T, int... Param>
class Demo
public:
static std::vector<int> __GetParam()
std::vector<int> vec;
Push(vec, Param);
return vec;
private:
static void Push(std::vector<int>& vec, int v)
vec.emplace_back(v);
template<int... Rest>
static void Push(std::vector<int>& vec, int v, Rest... rest) // error here
vec.emplace_back(v);
Push(vec, rest...);
;
int main()
auto vec = Demo<char, 1, 2, 3, 4>::__GetParam();
return 0;
谁能解释一下这个问题?提前致谢。
【问题讨论】:
【参考方案1】:直接把参数包展开成向量就行了
static std::vector<int> __GetParam()
std::vector<int> vecParam...;
return vec;
如果你想保持你最初的想法,你需要用包的每个参数调用 Push。一种方法是Variadic template initilizer_list trick
auto l = (Push(vec, Param),0)...;
然后,你只需要修复剩下的代码
static void Push(std::vector<int>& vec, int v)
vec.push_back(v);
template<int... Rest>
static void Push(std::vector<int>& vec, int v) // error here
vec.push_back(v);
Push(vec, Rest...);
【讨论】:
哦,这就是我想要的。谢谢。以上是关于可变参数模板(带有类和函数)无法编译的主要内容,如果未能解决你的问题,请参考以下文章