不知道該如何解釋好,所以我將只提供一個代碼示例,演示我的問題:調用指定的方法
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