的功能鏈考慮:調用不同類的繼承層次
class Foo {
public:
void Method1();
}
class Bar extends Foo {
public:
Bar* Method2();
}
class Baz extends Bar {
public:
Baz* Method3();
}
所以,
someObject *b = new Baz();
b->Method3()->Method2()->Method1();
這工作,因爲Baz()
包含了所有方法,包括Method2()
,Bar
包含Method1()
;
但是,由於返回類型,這似乎是一個糟糕的主意 - 在訪問第一個繼承級別簡單Method1()
時調用複雜的前Method3()
,並且必須保持這種調用單行 ..
b->Method1()->Method2()->Method(3); // will not work?
另外,有人告訴我,將try.. catch.. throw
放在其中一個Method's
之內有時會退出鏈條,而不會以錯誤的值調用下一個方法。這是真的?
那麼如何在C++中正確實現方法鏈?
這不是有效的C++語法,順便說一句。 – GManNickG 2011-04-22 22:11:19
**查找[CRTP](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)和哭泣。**它提供的功能與「虛擬」方法相同,但實現起來更復雜。 – CodeAngry 2014-02-06 12:00:47
@CodeAngry不知何故它是在habrahabr.ru同一天,你在這裏提到它.. – 2014-02-08 17:21:55