首页 文章

如何从C中的子类向超类添加方法

提问于
浏览
0

是)我有的:
不同自定义结构的向量(每个向量一个自定义结构)
我使用指向每个结构的指针给每个记录一个静态大小
通过指向每个向量的指针组合这些向量的向量
当我尝试将指针强制转换为自定义向量时,它会在每次迭代时失败
我的解决方法是调用一个函数,该函数将向量指针作为参数并返回一个void指针 .
我知道这是错误的,尽管功能正常,但我找不到正确定义转换方法的正确方法的参考 .

我正在寻找实现这一目标的正确方法 .

typedef struct mystruct {
    DWORD something;
    vectorclassa * somethinga;
    vectorclassb * somethingb;
    };

typedef std::vector&ltmystruct*> amystruct;
void * theWrongWay(mystruct * apointer){
    return apointer;
}

typedef std::vector bigvector;

如果我尝试bigvector.push_back(&instance_of_amystruct)
它失败 . 如果我将 std::vector<amystruct*> bigvector 更改为void *并使用&amystruct实例调用WongWay,则会编译/运行 . 这似乎不对 .

问题是我不知道如何为vector定义丢失的方法或将其转换为vector而不知道如何处理而不做某事......

1 回答

  • 2

    回答这个问题非常困难,因为很难说出你为什么要这样做 . 为什么要将不同类型的向量保存在另一个向量中?

    无论如何,我只是假设你想要这样做,因为你想对每个向量采取一些共同的行动 . 然后,您可以简单地定义一个定义该操作的抽象类,并具有此类的模板化子类,该类根据模板参数保留不同的向量 . 然后,您可以将矢量保存在容器中,将它们称为共同的祖先 . 一些代码:

    class ActionableVector {
       virtual void doSuperCoolStuff() = 0;
    }
    
    template<typename T>
    class VectorHandler: public ActionableVector {
        vector<T> handledVector;
        // vector<T> & handleVector; // You can keep a reference to an external vector too
        virtual void doSuperCoolStuff() {
            //do super cool stuff in a type-safe manner
        }
    }
    
    template<>
    class VectorHandler<ATypeThatNeedsSpecialAttention>: public ActionableVector {
        Vector<ATypeThatNeedsSpecialAttention> handledVector;
        virtual void doSuperCoolStuff() {
             // Do especially cool stuff
        }
    
    vector<ActionableVector*> myVectors;
    
    for(ActionableVector * av: myVectors ) { //C++ 11 yaay
        av->doSuperCoolStuff();
    }
    

    如果你真的真的想在一个容器中保留完全不同类型的物体,并愿意将你的灵魂卖给魔鬼,请看this答案 .

相关问题