CRTP を使用していますが、派生クラスの保護されたメンバーへのアクセスに問題があります。
私のコードに近い例を次に示します。
template< typename Self>
class A {
public:
void foo( ) {
Self s;
s._method( s); //ERROR, because _method is protected
}
protected:
virtual void _method( const Self & b) = 0;
};
class B : public A< B> {
protected:
void _method( const B & b) {}
};
私は友人のキーワードを使用しなければならないことを理解しました。しかし、クラスA< Self> のどこに置くべきかわかりません。void _method( const B &b)をBで公開できることはわかっていますが、そうしたくありません。Bでキーワードを使用することも、私には不可能です。