可变参数模板(带有 class 和函数)编译失败
variadic template (with class and funtion) fails to complie
我要实现一个自注册功能,想获取参数。好的,我的描述不清楚,这是我的代码。
#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;
}
谁能解释一下这个问题?提前致谢。
直接把参数包展开成vector就可以了
static std::vector<int> __GetParam()
{
std::vector<int> vec{Param...};
return vec;
}
如果你想保持你最初的想法,你需要用包的每个参数调用 Push。一种方法是
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...);
}
我要实现一个自注册功能,想获取参数。好的,我的描述不清楚,这是我的代码。
#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;
}
谁能解释一下这个问题?提前致谢。
直接把参数包展开成vector就可以了
static std::vector<int> __GetParam()
{
std::vector<int> vec{Param...};
return vec;
}
如果你想保持你最初的想法,你需要用包的每个参数调用 Push。一种方法是
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...);
}