我正在制作一个具有可变模板参数的模板类。然而,当我定义并调用一个方法时,我的编译器说该方法未定义。
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
}
};
最佳答案
尝试按如下方式重写主initializeParams()
template <typename U, typename ... As>
void initializeParam(U a, As... args) {
params[n++] = (void*)&a;
initializeParam(args...);
}
您当前的 initializeParams()
是从构造函数中调用的,但当尝试递归调用自身时,没有带有正确参数的 initializeParams()
。
因此,您必须将类的模板参数与 initializeParams()
的模板参数分开
关于c++ - 在C++中的模板类中定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43003155/