【发布时间】:2012-12-27 14:55:08
【问题描述】:
这可能是一个愚蠢的问题,我怀疑我知道答案(否),因为我似乎在这里碰壁了。
假设我有一个从某个类派生的对象集合:
class BaseClass;
class DerivedA: public BaseClass;
class DerivedB: public BaseClass;
class DerivedC: public BaseClass;
std::vector<BaseClass> myCollection;
我想根据具体类的类型调用一个方法:
class Processor {
void doSomething(DerivedA a, DerivedB b);
void doSomething(DerivedA a, DerivedC c);
}
问题是,如果我访问集合中的各个项目并尝试调用“处理器”中的“doSomething”方法,它将无法决定使用哪种方法(afaik)。所以我的问题是:有什么方法可以使用正确的派生类型获取集合中的项目?
【问题讨论】:
-
如果你想要派生支持(以及随之而来的多态性)。你的向量应该是指针(和智能指针);不是基类实例。
-
您可能还对visitor pattern感兴趣
-
@WhozCraig 感谢您的提醒,Karthik T 解释了为什么我需要这个,但我没有意识到如果我使用实例会发生对象切片。
-
以下是 C++11 中的多分派示例:ideone.com/lTsc7M