C++ 为什么crtp适用于结构而不适用于类? 让我们考虑下面的代码: template<typename T> struct Base{ }; struct Derived: Base<Derived>{ }; int main() { Base<Derived>* base_ptr = new Derived(); } 模板 结构基{ }; 派生结构:基{ }; int main(){ Base*Base_ptr=新派生的(); }

C++ 为什么crtp适用于结构而不适用于类? 让我们考虑下面的代码: template<typename T> struct Base{ }; struct Derived: Base<Derived>{ }; int main() { Base<Derived>* base_ptr = new Derived(); } 模板 结构基{ }; 派生结构:基{ }; int main(){ Base*Base_ptr=新派生的(); },c++,crtp,C++,Crtp,它是有效的,我的意思是它被编译了。与课堂上的版本相同: 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’ } 模板 阶

它是有效的,我的意思是它被编译了。与课堂上的版本相同:

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’
}
模板
阶级基础{
};
派生类:基{
};
int main(){
Base*Base_ptr=新派生的();
//错误“Base”是无法访问的“派生”基
}

因为对于结构,基类的默认访问权限是
公共
,而对于类,则是
私有

使用


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

使用


@AngelusMortis,我不明白你的评论,抱歉。这个问题与CRTP无关,所以我不明白为什么使用它的示例会有帮助。@AngelusMortis,我不理解你的评论,抱歉。这个问题与CRTP无关,所以我不明白为什么使用它的示例会有帮助。
class Derived: public Base<Derived>{
               ^^^^^^
class Base { };
class Derived : Base { };
Base* base_ptr = new Derived();