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

Casting from one templated container to another

本文关键字:另一个 一个      更新时间:2023-10-16

我目前正在编写WinRT代码,但是我想这个问题适用于所有C 。在用户交互后,该框架将我的一个功能称为传递带有通用对象的向量^ pointers的功能(对您的非释放人来说,与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^ cast tos^ specifictype^ in插入)?

您不能将Vector<Object^>施加到任何其他Vector<>,因为它们之间不涉及继承。您唯一能做的就是将每个元素投入到正确的类中。因此,如果您想要Vector<SpecificType^>,则确实需要重新创建它。并不是说太难了:

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