0

我目前正在编写 WinRT 代码,但我想这个问题适用于所有 C++。在用户交互时,框架调用我的一个函数,传入一个带有通用 Object^ 指针的向量(对于非 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^)?

4

1 回答 1

1

您不能Vector<Object^>转换为任何其他人Vector<>,因为它们之间不涉及继承。您唯一能做的就是将每个元素转换为正确的类。所以,如果你想要一个Vector<SpecificType^>,你确实需要重新创建它。并不是说它太难:

Vector<SpecificType^> specificList;
for (Object^ p : myList)
  specificList.push_back(static_cast<SpecificType^>(p));
于 2012-11-05T07:47:04.273 回答