以下の例では、かなり典型的なCRTPの例を示しています.2つの異なる派生クラスには、どちらもメソッドbar
があります。基底クラスは、単に転送し、いくつかにそれが型を持っている必要がありますので、私は、基本クラスの配列/ベクトル/などを持つことができるようにそれはいないようですbar
方法異なるCRTP派生クラスメソッドを反復する
#include <iostream>
template<typename Derived>
class Base {
public:
void foo() {
static_cast<Derived*>(this)->bar();
}
};
class DerivedA : public Base<DerivedA> {
public:
void bar() {
::std::cout << "A\n";
}
};
class DerivedB : public Base<DerivedB> {
public:
void bar() {
::std::cout << "B\n";
}
};
int main() {
DerivedA a;
DerivedB b;
a.foo();
b.foo();
}
を導出する方法foo
を持っていますT
が異なる
あるBase<T>
の線に沿って、それらすべてが同じ方法(この場合はbar
)を持っていると仮定すると別の派生クラスを反復処理することができることについてvirtual
せずに大会のいくつかの種類がありますか?
完全な例を投稿しますか? – asimes
の前に 'boost :: variant'を使用していません。' Base'はなく、 'DerivedA'と' DerivedB'だけが残っていると思いますか? – asimes
@asimes:OK、あなたのクラス定義と組み合わせると、私の答えは完全に実行可能なプログラムになるように少し修正されました。あなたが 'Base'を持っているかどうかにかかわらず、私のコードはどちらの方法でも動作しません。 –