这个:
template <typename T>
struct base {
T a;
};
template <typename T>
struct derived : base<T> {
derived(T v) : a(v) {} // xxx: how?
};
int main() {
return 0;
}
轰隆隆:
test.cc: In constructor ‘derived<T>::derived(T)’:
test.cc:12:20: error: class ‘derived<T>’ does not have any field named ‘a’
derived(T v) : a(v) {} // xxx: how?
如果我将 a(v)
替换为 { this->a = v;
没关系,有什么方法可以从派生类的初始化列表中初始化模板化基类的成员吗?
最佳答案
需要在派生类的成员初始化列表中初始化基类。由于您的基础没有构造函数,您可以使用大括号初始化(统一初始化),如
template <typename T>
struct base {
T a;
};
template <typename T>
struct derived : base<T> {
derived(T v) : base<T>{v} {}
};
关于c++ - 如何从派生构造函数初始化列表初始化模板基类的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52631830/