模板类定义中的模板构造函数定义

时间:2019-01-05 13:46:18

标签: c++ class templates constructor

我试图使生成器类保持生成的类,并且都扩展相同的类型。 (在我的程序中,它正在尝试使虚拟化具有通用的概念),如下所示:

template <class T>
class V : public T {
    T& owner; // the T owner

    template <class... Args>
    explicit V(T &_owner, Args... args) : T(args...) {
        owner = _owner; // holds the owner
    }
}
...
int main() {
    type t = type(512);
    V<type> vt = V(t, 256); //ERROR: undefinied reference...(to constructor expanded)
}

但是在函数main中调用构造函数时遇到了该错误,我必须更改什么?我在CLion IDE中使用的是C ++ 17。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

以下是对您代码的一些修复:

template <class T>
class V : public T {
// needs to be public
public:
    T& owner;

    template <class... Args>
    explicit V(T &_owner, Args... args)
        : T(args...),
        // references need to be initialized here
        owner(_owner)
    { }
};

/// the super class
struct memory
{
    memory(int _i) : i(_i) {}
    int i;
};

int main() {
    memory m = memory(512);
    auto vm = V<memory>(m, 256);

    return 0;
}

答案 1 :(得分:0)

您在代码中的错误之一是您的class's constructor。当您尝试instantiate中的class template对象时,您的main() class'sconstructor。它必须是private

另一个是当您从public class's分配member reference constructor's时;您不应该在parameter正文中使用assignment operator,而应该使用constructor's constructor's