C++ コード片 ?? 継承関係にあるクラス間でお互いのメンバ参照が行える

公開:2005-04-13 20:36
更新:2020-02-15 04:36
カテゴリ:

WTLで使われている手法ですね。friendは余計ですが...。

#include <iostream>
// 継承関係にあるクラス間でお互いのメンバ参照が行えるサンプル
template <class T> struct A
{
friend T;
A(){_u = 6;};
void f(){std::cout << typeid(A<T>).name() << ":" << static_cast<T*>(this)->_value << std::endl;};
// 派生クラスのメソッドを呼び出す
void callg(){static_cast<T*>(this)->g();};
private:
int _u;
};
struct B : A<B>
{
friend struct A<B>;
B(){_value = 10;};
void g(){std::cout << typeid(B).name() << ":" << _u << std::endl;};
// ベースクラスのメソッドを呼び出す(当たり前)
void callf(){f();};
private:
int _value;
};
main()
{
B b_;
b_.callf();
b_.callg();
}