0
我目前正在寫WinRT的代碼,但我想這個問題適用於所有的C++。在用戶交互時,框架調用我的一個函數傳遞一個帶有通用對象指針的向量(對於非WinRT人來說,非常類似於void *)。我已經知道向量中的對象是什麼類型,我想將向量轉換爲該對象類型。從一個模板容器鑄造到另一個
例子:
MyClass::SomeFunction(Vector<Object^>^ myList) {
// Warning: The following line doesn't work!!
Vector<SpecificType^>^ myTypedList = static_cast<Vector<SpecificType^>^>(myList);
// Here, I go on to interact with the templated vector.
...
}
編譯器不會允許我使用的static_cast。 safe_cast引發異常。 dynamic_cast不會引發異常,但會返回空指針。
有沒有一種方法可以讓我投這件事,或者我從字面上來創建一個新的載體,所有成員拷貝過來(鑄造每個從Object ^到SpecificType ^上插入)?
跛腳。我想這解釋了爲什麼我找不到答案。 –
更具體地,不同於C#,C++/CX不支持通用類型的協方差/逆變。無論「T」與「U」之間的關係如何,「矢量」和「矢量」都是不相關的類型。 –
@AndyRich在這種情況下,協方差/逆變不會幫助你,因爲載體通常是一個讀/寫結構。但是在其他模板中,你所說的可以在C#中工作。 – Gorpik