从一个模板化容器铸造到另一个模板化容器

时间:2012-11-05 07:39:31

标签: c++ casting c++-cx

我目前正在编写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 ^)?

1 个答案:

答案 0 :(得分:1)

您无法将Vector<Object^>投射到任何其他Vector<>,因为它们之间不存在任何继承。你唯一能做的就是将每个元素都投射到正确的类中。所以,如果你想要Vector<SpecificType^>,你确实需要重新创建它。并不是说太难了:

Vector<SpecificType^> specificList;
for (Object^ p : myList)
  specificList.push_back(static_cast<SpecificType^>(p));