在c ++中定义模板类中的方法

时间:2017-03-24 15:15:54

标签: c++ c++11 templates recursion variadic-templates

我正在创建一个具有可变模板参数的模板类。但是,当我定义并调用方法时,我的编译器说该方法没有定义。

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
    }
};

1 个答案:

答案 0 :(得分:2)

尝试重写主initializeParams(),如下所示

template <typename U, typename ... As>
void initializeParam(U a, As... args) {
    params[n++] = (void*)&a;
    initializeParam(args...);
}

从构造函数调用当前的initializeParams()但是当尝试递归调用自身时,没有initializeParams()具有正确的参数。

因此,您必须将类的模板参数与initializeParams()

的模板参数分开