C++ では、ランタイム ポリモーフィズムに純粋仮想クラスがよく使用されます。
だからあなたは持っています:
class IInterfaceA
{
virtual void DoFoo() = 0;
};
そして、次のような派生クラス:
class CFancyObject : public IInterfaceA
{
...
次に、次のような関数で使用できます。
void Foo(IInterfaceA &interface);
ただし、これは実行時のケースであり、コンパイル時にオブジェクトがわかっている場合は、CRTP を使用することでより適切に処理できます。
template<class T> class IInterfaceA
{
public:
void DoFoo()
{
static_cast<T*>(this)->CallDerivedFunction();
}
}
class CFancyObject : public IInterfaceA<CFancyObject>
{
...
}
IInterface をパラメーターとして受け取る関数で CRTP ベースの派生クラスを使用することは可能ですか?
void Foo(IInterfaceA<?> &interface);