c++ - 从一个模板化容器转换到另一个

标签 c++ casting c++-cx

我目前正在编写 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/

相关文章:

c# - 无法转换 TempData 的内容

c++ - 动态转换后调用特定的类方法 - 奇怪的行为

c++ - 那么公共(public)变量有什么好处呢?

C++:包含类实例的 union 会调用错误的虚函数

在 C 中转换 Void 函数

c++ - 使用 C++/CX for Desktop Windows 的 XAML 应用程序

c++ - 在 Windows Metro 中以编程方式从网格中删除对象

c++ - 来自 "The C++ Programming Language 4th Edition"第 19.3.3.1 节的代码是否有效?

来自变量的 C++ 数组名称

c# - 如何从C++ UWP App引用C#UWP类库