マップコンテナを使用してシェイプを保持し、それらのシェイプをID番号に一致させようとしています。
これまで、私は常にSTLコンテナを使用して、オブジェクトを保持およびメモリ管理してきました。だから私はこれらの種類のコンテナを使用します:
std::map<int, Square> squares;
std::map<int, Triangle> triangles;
std::map<int, Circle> circles;
しかし、「Shapes」を保持するための単一のマップが必要です。これは、Square、Triangle、Circleの抽象的な基本クラスです。したがって、これを実現するために、実現可能な派生クラスオブジェクトを独自のマップに格納してから、別のマップを作成します。
std::map<int, Shape*> shapes;
他のマップに保存されているオブジェクトへのポインタを保存します。
ただし、これは非常に厄介なようです。すべてのオブジェクトを、含まれているオブジェクトを所有してメモリ管理する単一のポリモーフィックマップに格納したいと思います。
Boostのptr_mapについて少し読んだ後、これが解決策だと思いました。しかし、基本クラスは、使用しようとしているときのように実現可能である必要があるようです。
boost::ptr_map<int,Shape> shapes;
「エラー:抽象型'Shape'のオブジェクトを割り当てることができません」というエラーが表示されます。
基本クラスを実現可能にする必要がありますか?それはちょっとしたハックになるので、そのような方法があれば、私はむしろこれを適切に行いたいと思います。
これを行う方法についての私の次の最良の推測は、次のようなコンテナを使用することです。
std::map<int, boost::shared_ptr<Shape> > shapes;
これはとても簡単な目的のように思えますが、私はそれがとても難しいので、私がすべきでないことをしようとしているのではないかと思います。ですから、私がどこで間違っているのかについてのアドバイスは大歓迎です。
ありがとう。