此:
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; }
很好,是否有任何方法可以从派生类的初始化列表中初始化模板化基类的成员?
答案 0 :(得分:4)
您需要在派生类的成员初始化列表中初始化基类。由于您的库没有构造函数,因此可以使用花括号初始化(统一初始化),例如
import-osmborder
答案 1 :(得分:2)
在基类中创建一个构造函数,并在派生类的初始化列表中调用它。即:
template <typename T>
struct base {
T a;
base(T v) : a(v) { }
};
template <typename T>
struct derived : base<T> {
derived(T v) : base(v) {}
};