【问题标题】:Define methods in template class in c++在C++模板类中定义方法
【发布时间】:2017-08-17 14:34:58
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

尝试重写主initializeParams()如下

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

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

所以你必须将类的模板参数与initializeParams()的模板参数分开

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多