インナークラスによる複数のインターフェース実装
複数のインターフェイスがあって、それを実装するクラスCがあるとします。複数のインターフェイスを型によって使い分けたいとき便利な方法があります。
以下のように実装をインナークラスに書き、変換演算子によって変換するというものです。
#include <iostream> using namespace std; struct BaseA_IF { virtual void func() = 0; }; struct BaseB_IF { virtual void func() = 0; }; struct C { struct BaseA : public BaseA_IF { void func() { cout << "BaseA::func()" << endl; } } base_a; struct BaseB : public BaseB_IF { void func() { cout << "BaseB::func()" << endl; } } base_b; operator BaseA&() { return base_a; } operator BaseB&() { return base_b; } }; int main() { C c; BaseA_IF& ba = c; ba.func(); // BaseA::func() BaseB_IF& bb = c; bb.func(); // BaseB::func() cin.get(); }