2009-01-31 77 views

回答

9

有一點要記住,C++模板和C#泛型不完全相同。有關這些差異的更多詳細信息,請參閱此answer

從您鏈接到解釋C++ 0x概念的頁面,聽起來像這樣的想法是,在C++中,您希望能夠指定模板類型實現某些屬性。在C#中,約束條件比這更進一步,並強制泛型類型爲該「約束」的「。例如,以下C#代碼:

public GenericList<T> where T : IDisposable 

說,代替Ť中使用的任何類型必須實現IDisposable接口。同樣,下面的代碼:

public abstract class ABC {} 
public class XYZ : ABC {} 

public GenericList<T> where T : ABC 

說,任何用於替代T的類型必須是ABC類型或從ABC派生。

C++ 0x的概念思想只是說用來代替T的類型必須具有與ABC(或IDisposable)所定義的屬性相同的屬性,而不是它必須是該類型的。

+1

如果它像鴨子一樣飛得飛快,那麼它肯定是鴨子呢? :-) – Zen 2009-01-31 10:11:09