を介して迂回する代わりにvoid*、C++11では。を使用しますreinterpret_cast。
しかし、あなたが望む変換は非常に悪いことを許します:
#include <iostream>
#include <vector>
using namespace std;
class Base {};
class Derived: public Base
{ public: int x; Derived(): x(42) {} };
int main()
{
vector< Derived* > v;
Derived d;
v.push_back( &d );
cout << v.back()->x << endl; // 42
vector< Base* >* pbv =
reinterpret_cast< vector< Base* >* >( &v );
Base b;
pbv->push_back( &b );
cout << v.back()->x << endl; // indeterminate value
}
T**これは、変換時に発生する問題とほぼ同じですT const**(許可されていないため、問題が発生する可能性があります)。要するに、自分が何をしているのかを正確に理解していない限り、これを行わないでください。長い方ですが、ここで説明する余地はありませんが、可変コレクションと不変コレクションを区別し、非常に注意する必要があります。
編集:他の人(変換の質問に対処しなかった)がすでに述べたように、実用的な解決策は、
Aポインターのベクトル、またはスマートポインターであり、C ++ポリモーフィズム(つまり仮想メンバー関数)を使用します。