Object クラスと ObjectManager クラスの 2 つのクラスがあります。ObjectManager クラスは、ptr_vector コンテナーを介して「オブジェクト」を格納します。これらの格納されたポインターへの参照を取得して、個々のアクションを実行する必要がある場合があります。どうすればそうすることができますか?
コンパイル可能な疑似コード:
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/shared_ptr.hpp>
class Object
{
public:
int m_Id;
Object(int id) : m_Id(id) { }
};
class ObjectManager
{
private:
typedef boost::shared_ptr<Object> ObjectPtr;
typedef boost::ptr_vector<Object> ObjectVectorPtr;
typedef ObjectVectorPtr::iterator ObjectIt;
ObjectVectorPtr vector_;
void AddObject(Object *obj) {
vector_.push_back(obj);
}
ObjectPtr FindObject(int id) {
for (ObjectIt it = vector_.begin(); it != vector_.end(); it++) {
if (it->m_Id == id) {
// Found the object...How to return a shared_ptr reference to it?
// The line below is invalid, obviously:
// cannot convert parameter 1 from 'Object' to 'const boost::shared_ptr<T> &'
return *it;
}
}
// We could not find anything.
return ObjectPtr();
}
};
基本的には、ObjectManager に所有権を保持してもらいたいのですが、他のクラスがオブジェクトへの参照を取得し、何が起こっているかに応じてそのオブジェクトのメソッドを呼び出し、次に進むことができるようにしたいと考えています。