gpt4 book ai didi

c++ - 为什么 crtp 适用于结构而不适用于类?

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:05 25 4
gpt4 key购买 nike

让我们考虑以下代码:

template<typename T>
struct Base{
};
struct Derived: Base<Derived>{
};
int main() {
Base<Derived>* base_ptr = new Derived();
}

它有效,我的意思是它已编译。和类的相同版本:

template<typename T>
class Base{
};
class Derived: Base<Derived>{
};
int main() {
Base<Derived>* base_ptr = new Derived();
//ERROR ‘Base<Derived>’ is an inaccessible base of ‘Derived’
}

最佳答案

因为对于结构,基类的默认访问权限是public,而对于类,它是private

使用

class Derived: public Base<Derived>{
^^^^^^

使其等同于第一个示例。

这与 CRTP 无关,如果没有 CRTP,您会得到完全相同的错误:

class Base { };
class Derived : Base { };
Base* base_ptr = new Derived();

关于c++ - 为什么 crtp 适用于结构而不适用于类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com