相关疑难解决方法(0)

为什么 C++ 要求我在初始化器列表中重复我的基类的模板参数?

我正在将一些代码从 MSVC(没有 permissive-)移植到 linux,我了解到如果在类的初始化列表中调用模板基类的构造函数,则必须指定所有模板参数,否则会出现错误。似乎有点多余,因为如果您在重新输入模板参数时犯了一个错误,那就是一个硬错误:

错误:类型 'Base<int, true>' 不是 'Derived' 的直接或虚拟基数

完整代码在这里:

template <typename T, bool has_x>
struct Base
{
    Base(T t): t_(t){
    }
    T t_=0;
};



template <typename T>
class Derived : public Base<T, false>
{
public:
    // : Base<T, true> is hard error
    Derived(const T& t) : Base<T, false>(t) {}
};

int main()
{
    Derived d(47);
}
Run Code Online (Sandbox Code Playgroud)

这是否有充分的理由,或者只是标准化过程从未花时间处理这个用例的特殊情况?

c++ inheritance

3
推荐指数
1
解决办法
138
查看次数

标签 统计

c++ ×1

inheritance ×1