私のプログラムの目的は、クラス階層で静的ポリモーフィズムを使用しながら、一連の静的ビジターでアクセスできるデータのリストを作成することです。
CRTP を介して静的ポリモーフィズムを利用するクラスの階層を作成しました。
class VirtualBaseData {
public:
//someVirtualFunction
}
template<typename Derived>
class BaseData<Derived> {
public:
template<typename Visitor>
void accept(Visitor &v){
static_cast<Derived*>(this)->accept(v);
}
}
class DerivedBaseData1: BaseData<DerivedBaseData> {
public:
template<typename Visitor>
void accept(Visitor &v){
//Specific implementation
}
}
class DerivedBaseData2: BaseData<DerivedBaseData> {
public:
template<typename Visitor>
void accept(Visitor &v){
//Specific implementation
}
}
DerivedBaseData を格納して、後で反復してアクセスできるようにしたいと考えています。
int main(){
std::vector<VirtualBaseData*> dataSet;
dataSet.push_back(new DerivedBaseData1);
dataSet.push_back(new DerivedBaseData2);
for(auto it = fifth.begin(); it != fifth.end(); ++it){
it->accept(); //Error: VirtualBaseData does not have a member function accept
}
}
静的ビジターを静的ポリモーフィズム階層と結合する方法を探しています。コンテナーでクラスを使用するために、テンプレート クラスではない静的ポリモーフィズムで VirtualBaseData クラスが必要です。ただし、VirtualBaseData クラスをテンプレート クラスにすることができないため、CRTPattern で行ったように、適切な static_cast を派生クラスに作成することができません。
私の質問は、私の静的ポリモーフィズム設定と静的ビジター パターンを保持する優れた戦略を持っている人はいますか?
参考までに: http://hillside.net/plop/2006/Papers/Library/portableProgrammingPL.pdfの 21 ~ 23 ページで説明されているように、静的ビジターを実装しました。