草庐IT

CRTPBase

全部标签

c++ - 来自私有(private) CRTP 基地的回调

以下代码不起作用,因为您不能从私有(private)基类static_cast。用C风格的转换来替换转换是可行的(尽管我最初认为这会调用未定义的行为,但显然它不会,请参阅thisanswer),但是相当丑陋,因为它还允许您绕过常量检查等.另一种方法是使CRTPBase成为友元,但这会暴露所有Derived的私有(private)成员。是否有另一种不使用C风格转换也不使CRTPBase成为友元的编写方式?templatestructCRTPBase{voidcallBase(){T*derived=static_cast(this);derived->publicMethod();}};