我有一個用C#編寫的專用字典,它需要兩個泛型參數。該接口是Typedefs,C++/CLI,C#+依賴注入
public interface IMyDictionary<TKey, TValue> { ... }
和它的一個實現
public MyDictionary<TKey, TValue> {...}
我也有一個複雜的C++模板結構,我在C++/CLI引用類的typedef:
typedef boost::some_complex_template<stuff> MySimpleValueType;
在我C++/CLI ref類的構造函數,我用來創建字典的一個實例:
MyCppCliClass::MyCppCliClass()
: _my_dict(gcnew MyDictionary<MySimpleValueType, Something^>())
{...}
現在,如果你喜歡依賴注入,你會注意到這是不好的。理想情況下,我應該有一個這樣的構造:
MyCppClass::MyCppCliClass(IMyDictionary<MySimpleValueType, Something^>^ dict){...}
這個類在C#中實例化,所以現在我的問題:
我怎樣才能實例,我使用的是現在的C超出這個有效的引用類++/CLI,假設(afaik)C++模板typedef和純C++類型在C#中都可用?
MySimpleValueType顯然必須是C#本機類型,或字典的實例會失敗:
error C3225: generic type argument for 'T1' cannot be '...', it must be a value type
> or a handle to a reference type.
我覺得我應該能在C++/CLI類定義的類型(與類型定義) ,但從外部實例化字典。 C++/CLI typedefs在C#中是不可用的,所以也許有一種方法用getter和var類型演繹?有任何想法嗎?
如果MySimpleType可用在字典,這是否意味着它實際上是一個有效的'ValueType'(例如'的boost :: some_complex_template :: number_type'這原來是'int')? –
Medinoc
在調試器中查看它,它告訴我它是一個IMyDictionary。但是我不認爲我可以依賴它,因爲typedef取決於typedef,而typedef又取決於各種其他類型定義(boost,yknow;))。 –
Wilbert
我相信你的C++/CLI代碼不會編譯,如果它不是對CLR有效的類型(比如'unsigned __int64' /'System :: UInt64')。所以我猜如果你的代碼編譯,C#代碼可以鏈接到它。 (畢竟,你實際上並沒有將模板暴露給其他程序集,只有模板實例化結果和泛型) – Medinoc