0

私は現在WinRTコードを書いていますが、この質問はすべてのC++に当てはまると思います。ユーザーが操作すると、フレームワークは私の関数の1つを呼び出し、ジェネリック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は例外をスローしませんが、nullポインターを返します。

これをキャストする方法はありますか、それとも文字通り新しいベクトルを作成してすべてのメンバーをコピーする必要がありますか(挿入時にそれぞれを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 に答える