コメントに示されているように、次の構造があります。フレームワークで定義されているものとそうでないものがあります。
struct FixedInterface { // from the framework
virtual ~FixedInterface() {}
}
struct MyAdditionalInterface { // generic, personal/additional interface
};
私のプログラムの次の構造は、上記の 2 つの構造から派生でき、厳密に型指定されたフレームワークに使用/渡されます。
struct MyFirstInterface : MyAdditionalInterface, FixedInterface {
};
struct MySecondInterface : FixedInterface {
};
struct MyThirdInterface : MyAdditionalInterface, FixedInterface {
};
// ...
struct MyNthInterface : FixedInterface {
};
フレームワークにより、次のシグネチャを持つカスタム関数を定義して「注入」できます。この関数は、必要に応じてフレームワークによって呼び出されます。
void MyClass::my_function(const FixedInterface& obj) {
}
上記の関数の本体では、obj がMyAdditionalInterface
(つまりMyFirstInterface
or MyThirdInterface
) のインスタンスであるかどうかを知る方法が必要です。これにより、obj をキャストしてMyAdditionalInterface
.
どうすればその情報を入手できますか? 階層を変更せず、vtable がない限り、構造を自由に変更できますMyAdditionalInterface
(仮想関数やデストラクタはありません。理由は、フレームワークがそれを許可しないためです)。
場合によっては自由に使用できますBoost
。C++11 にアクセスできます。