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

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

最佳答案

尝试按如下方式重写主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/

相关文章:

c++ - 使用 libav 从内存中解码视频文件

c++ - 线程上下文的静态存储对象优化

c++ - 重载 >> 使用字符串类

c++ - 丢失 const volatile 限定词

c++ - std::enable_shared_from_this;公共(public)与私有(private)

c++ - 计算点和平面之间的 3d 距离,C++

c++ - 比较不同类型的 C++ for 循环

c++ - 在对象内部和外部调用函数的不同行为

php - 为什么几乎所有的 PHP 框架都使用 "<?php echo ... ?>"

c++ - 实例化模板类时出现奇怪的错误消息