我目前正在编写 WinRT 代码,但我想这个问题适用于所有 C++。在用户交互时,框架调用我的函数之一,传递带有通用 Object^ 指针的 vector (对于非 WinRT 用户来说非常类似于 void*)。我已经知道 vector 中的对象类型,我想将 vector 转换为该对象类型。
例子:
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 不会抛出异常,但会返回空指针。
有没有一种方法可以转换这个东西,或者我真的必须创建一个新 vector 并将所有成员复制过来(在插入时将每个成员从 Object^ 转换为 SpecificType^)?
最佳答案
你不能投Vector<Object^>
任何其他 Vector<>
因为他们之间不涉及继承。您唯一可以做的就是将每个元素转换为正确的类。所以,如果你想要一个 Vector<SpecificType^>
您确实需要重新创建它。并不是说它太难了:
Vector<SpecificType^> specificList;
for (Object^ p : myList)
specificList.push_back(static_cast<SpecificType^>(p));
关于c++ - 从一个模板化容器转换到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13227880/