私は現在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^にキャストします)?