小编Kog*_*ido的帖子

将静态访问者与静态多态性层次结构耦合

我的程序的目的是创建一个数据列表,我可以在类层次结构中使用静态多态性时通过一组静态访问者访问该数据列表。

我通过 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
    }    
}
Run Code Online (Sandbox Code Playgroud)

我想将 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 …
Run Code Online (Sandbox Code Playgroud)

c++ crtp static-polymorphism template-function static-visitor

5
推荐指数
1
解决办法
1391
查看次数