如何从派生构造函数初始值设定项列表初始化模板基类的成员?

gct*_*gct 1 c++ c++11

这:

\n\n
template <typename T>\nstruct base {\n    T a;\n};\n\ntemplate <typename T>\nstruct derived : base<T> {\n    derived(T v) : a(v) {} // xxx: how?\n};\n\nint main() {\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

繁荣:

\n\n
test.cc: In constructor \xe2\x80\x98derived<T>::derived(T)\xe2\x80\x99:\ntest.cc:12:20: error: class \xe2\x80\x98derived<T>\xe2\x80\x99 does not have any field named \xe2\x80\x98a\xe2\x80\x99\n     derived(T v) : a(v) {} // xxx: how?\n
Run Code Online (Sandbox Code Playgroud)\n\n

a(v)如果我用它替换{ this->a = v; }就可以了,有什么方法可以从派生类的初始值设定项列表中初始化模板化基类的成员吗?

\n

Nat*_*ica 5

需要在派生类的成员初始化列表中初始化基类。由于您的基础没有构造函数,您可以使用大括号初始化(统一初始化),例如

template <typename T>
struct base {
    T a;
};

template <typename T>
struct derived : base<T> {
    derived(T v) : base<T>{v} {}
};
Run Code Online (Sandbox Code Playgroud)