我正在创建一个具有可变模板参数的模板类。但是,当我定义并调用方法时,我的编译器说该方法没有定义。
template <class T, class... Args>
class Params {
private:
vector<void*> params;
int n;
void initializeParam(T a, Args... args) {
params[n] = (void*)&a;
n++;
initializeParam(args...);
}
void initializeParam() {}
public:
Params(T a, Args... args) : params(vector<void*>(sizeof...(Args))) {
n = 0;
initializeParam(a, args...); // Compiler -> initializeParam is not defined
}
};
答案 0 :(得分:2)
尝试重写主initializeParams()
,如下所示
template <typename U, typename ... As>
void initializeParam(U a, As... args) {
params[n++] = (void*)&a;
initializeParam(args...);
}
从构造函数调用当前的initializeParams()
但是当尝试递归调用自身时,没有initializeParams()
具有正确的参数。
因此,您必须将类的模板参数与initializeParams()