不知道该如何解释好,所以我将只提供一个代码示例,演示我的问题:调用指定的方法
class Base {
public:
Base() = default;
~Base() = default;
virtual void stuff(std::shared_ptr<Base> b) = 0;
};
class DerivedA : public Base {
public:
DerivedA() = default;
~DerivedA() = default;
void stuff(std::shared_ptr<Base> b) {
std::cout << "stuff Base"
<< "\n";
}
};
class DerivedB : public Base {
public:
DerivedB() = default;
~DerivedB() = default;
void stuff(std::shared_ptr<Base> b) {
std::cout << "stuff Base"
<< "\n";
}
void stuff(std::shared_ptr<DerivedA> b) {
std::cout << "stuff Derived"
<< "\n";
}
};
int main(int argc, char *argv[]) {
std::shared_ptr<Base> b1(new DerivedA());
std::shared_ptr<Base> b2(new DerivedB());
b1->stuff(b2);
b2->stuff(b1);
return 0;
}
输出将是:
stuff Base
stuff Base
现在,我想不可能调用派生方法,因为它不存在于基类中。
我的问题是:有没有办法使用基类来调用stuff(std::shared_ptr<DerivedA> b)
?
[编辑]
我已经想到了访问者模式(应该说,这和更具体)。
我的类代表实体,我必须检查它们之间的冲突。然而,一个& B之间的碰撞将有较B C.
之间&
我同意,这将工作不同的效果,但它意味着我将要定义吨的方法。有没有更好的方法来做到这一点?
在此先感谢。
这看起来像访客模式的工作! https://en.wikipedia.org/wiki/Visitor_pattern – Louen
看起来像是在方法(或任何函数)重载和(虚拟)方法覆盖之间混淆了。 – hyde
我编辑了我的问题以回答@Louen – Luc