繁体   English   中英

如何在C ++中从子类添加方法到超类

[英]How to add a method to a superclass from a subclass in C++

我有的:
不同自定义结构的向量(每个向量一个自定义结构)
我使用指向每个结构的指针给每个记录一个静态大小
通过指向每个向量的指针组合这些向量的向量
当我尝试将指针强制转换为自定义向量时,它会在每次迭代时失败
我的解决方法是调用一个函数,该函数将向量指针作为参数并返回一个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实例调用WWongWay,则编译/运行。 这似乎不对。

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

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

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

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();
}

如果你真的真的想要在容器中保留完全不同类型的物体,并愿意将你的灵魂卖给魔鬼那么,看看这个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM