c++ - 如何从派生构造函数初始化列表初始化模板基类的成员?

标签 c++ c++11

这个:

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/

相关文章:

c++ - 自动工具检查 C++11

c++ - Clang 问题 : implicit type conversion at construction time

c++ - 将 std::string 转换为 const char* 供 printf 消费

c++ - 如何将 cin'd c 样式字符串传递给函数?

c++ - 我可以从取消引用 `new` 返回的值初始化引用吗?

c++ - 通过 BST 进行中缀、前缀或后缀排序以获得打印元素的降序

c++ - 没有匹配函数来调用 sort()

java - 在 java 的 jni 中使用非静态对象

C++ 解析函数类型模板参数

c++ - 为什么十进制浮点运算的提议没有被 C++0x 接受?