模板类继承问题

template class inheritance problem

本文关键字:问题 继承      更新时间:2023-10-16

你能告诉我,我错过了什么吗?

template <class T> struct Base
{
    T data;
    Base(const T &_data):data(_data) { }
};
template <class T> struct Derived : Base<T>
{
    Derived():Base(T()) {} //error: class 'Derived<T>' does not have any field named 'Base'
};
template <class T> struct Derived : Base<T>
{
    Derived():Base<T>(T()) {} 
};

> 还有一个问题:谁是对的?海湾合作委员会就在这里。非限定名查找不查找依赖基类,因此不会在 Base<T> 范围内找到Base。您也可以将代码更改为以下标准一致性变体

Derived():Derived::Base(T()) {}

如果我没记错的话,这只受GCC4.5支持。早期版本没有正确实现注入的类名查找。