2014-01-25 35 views
1

我有相同名稱的泛型和非泛型接口的問題。爲什麼Visual C++不接受具有相同名稱的泛型和非泛型接口?

我的代碼:

public interface class IPacked { 
    // Methods 
    void PackFromDouble(double realNumber); 
    double ToDouble(); 
}; 

generic<typename T> public interface class IPacked : public IPacked { 
    // Property 
    property T PackedValue { 
     virtual T get(); 
     virtual void set(T value); 
    } 
}; 

我知道,它可以被編譯。我的朋友在舊的團隊項目中使用它。 但是,這個問題在函數中不存在。

+0

我知道(猜測)它們在同一個命名空間中,但仍然嘗試使用命名空間限定的名稱嗎? ('generic public interface class IPacked:public MyNamespace :: IPacked') – Medinoc

回答

3

由於C++語言規則,它不受支持。從C++/CLI Language Specification,章節31.1:

泛型類型不得具有相同的名稱與任何其他泛型類型,模板,類,委託功能, 對象,枚舉,枚舉,命名空間或類型相同範圍(C++標準3.3),除了在C++標準的14.5.4中規定的 。除了泛型函數可以通過具有相同名稱的非泛型函數 或其他具有相同名稱的泛型函數來重載外,名稱空間範圍或類範圍中聲明的通用名稱 在該範圍內應該是唯一的。

C++標準的第14.5.4章討論了部分模板特化,沒有什麼能夠幫助你。

作爲一種解決方法,您可以考慮在C#程序集中聲明接口並添加對其的引用。或者使用不同的命名空間,就像System :: Collections :: IEnumerable vs System :: Collections :: Generic :: IEnumerable <>。