2011-06-14 21 views

回答

0

在一般情況下,你不能這樣做。這就是爲什麼面向對象的語言將模板和泛型添加到其中的原因。例如,在引入模板之前,所有嘗試在C++中創建通用容器失敗或幾乎完全無法使用的嘗試。

+0

如果我使用指向基本類的指針來概括其派生類的功能,會發生什麼? – 2011-06-14 07:41:30

+1

@two_d不知道 - 但這不是一般意義上的通用性。 – 2011-06-14 07:48:11

1

在一些編程語言中,您可以使用抽象類型成員的繼承來模擬genericy。 這是一個使用scala的例子。即使你不知道Scala也應該可以理解。

class Collection { 
type T; 
//all methods are using T for the contained type. 
} 

我不確定,但在C++類型將是typedef。 按照這一辦法,你可以通過子類型集合並指定類型T於獲取與A型的元素集合:

class IntCollection extends Collection { 
type T = Int; 
//... 
} 

該解決方案具有相對於仿製藥或模板一些不足之處,但也提供了好處。 如果你有興趣,然後考慮閱讀:http://www.artima.com/weblogs/viewpost.jsp?thread = 270195 抽象類型成員與通用類型參數在斯卡拉。 再次,你不需要知道scala來理解帖子。 編輯:引用一句話: 至少原則上,我們可以將每種參數化形式表示爲面向對象抽象的形式。 希望有幫助

1

只有靜態類型語言(或帶有類型提示的類型)才需要泛型 - 因爲您不想失去幾乎沒有獲得的類型安全性。

如果你的(靜態)語言沒有它們,那麼可能是考慮不同的一種了 - 使用繼承進行模擬是很醜陋的。

或更好 - 考慮動態語言和測試驅動開發。你將獲得更多的權力(所有東西都是通用的,不需要輸入),測試將代表你的合同 - 包括具體的例子 - 這是最好的類型安全抽象根本無法做到的。 (因爲它是抽象的)