何らかの方法で親が子の保護されたメンバーにアクセスできるようにすることはできますか?親アクセスの子サブプライベート/プロテクト
template <class T>
class B {
public :
void print()
{
cout << T::a << T::b << endl;
}
};
class C : public B<C>
{
protected :
static int a;
static int b;
public :
C() {
print();
}
};
これは多相(仮想)のない複数のオブジェクトを継承するのに便利です。どんな提案?
編集:
の下に提案されているよう私は2つの解決策を見つける::
- フレンドクラスとしてBを作り、
- CRTP
さらにいくつかの点が考慮すべき
最近のコンパイラに、基本クラスから静的定数データ(仮想静的定数)を転送しないように使用することができます
は、私はそれが今ではほとんどのコンパイラであると思いdevirtualizationと呼ばれる概念を使用します。
BのCフレンドを作成します。 – Zereges
[CRTP](https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)は逆になります! –
私はこれが言われることを知っていましたが、ポイントはなぜ保護されたデータだけを述べたのかです。これは、すべての派生クラスを基本クラスのフレンドとして追加することができないため、設計ごとに有効なソリューションではありません。 –