1

我現在正在學習現代C++,目前專注於抽象工廠,根據我的理解,Loki的主要想法之一是避免在GoF中使用的「虛擬」(動態多態)。但有時候,它仍然被使用。在關於抽象工廠的一章中,AbstractFactoryUnit具有「虛擬」。從目前爲止我讀到的http://loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/AbstractFactory.h?view=markup,有辦法繞過它。 http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism爲什麼AbstractFactoryUnit具有動態而不是靜態多態?

爲什麼在這種情況下使用虛擬更有效?

回答

1

由於Loki的目標看起來主要是教育性的,所以我認爲靜態多態性可能是爲了清楚起見而被避免的。在教授抽象工廠這樣的設計模式時,類之間的關係是最重要的方面。在這種情況下,多態性如何實施似乎是一個次要的,與實現相關的問題。

真正的靜態多態性可能更有效,但會降低代碼的可讀性。

你可能會爭辯說,如果你要頻繁地創建大對象,你會從使用靜態多態性中受益。這是非常真實的,但我認爲Loki並不打算用於這種情況。其主要目的是教學。

看看Boost.Factory的源代碼,這可能會有所幫助。事實上,我寧願從Boost源代碼研究現代C++;不錯,據說Loki已經爲Boost奠定了基礎,但請記住,Boost已經獲得了更多的使用方式,從而更多地進行了審查和批評。

相關問題