Reticule
次のように定義された抽象クラスがあります。
class Reticule : public Drawable, public Object {
//some irrelevant methods to the question
};
ターゲティング レチクルを描画するために使用されます。つまり、呪文に円または円錐形の AoE レチクルを持たせたい場合は、上記のクラスから派生させます。
class Circle : public Reticule {
public:
Circle(float radius);
//etc
};
2 つのメソッドを持つ別のクラスWorld
があります。1 つは描画可能なものを登録するためのもので、もう 1 つはオブジェクトを登録するためのものです。
class World {
public:
void registerDrawable(Drawable* drawable);
void registerObject(Object* object);
//other irrelevant methods
private:
std::list<Drawable*> drawables_;
std::list<Object*> objects_;
};
これらの関数は、関連付けられたコンテナーへのポインターを追加します。これにより、ワールド内のオブジェクトが互いに相互作用できるようになります。
私の呪文では、次のようにレチクルを作成しています。
reticule_ = std::unique_ptr<Recitule>(new Circle(3.0f));
私の問題は、レチクルをWorld
クラスに登録する方法です。これを行うために機能します:
world.registerDrawable(&(*reticule_));
world.registerObject(&(*reticule_)));
しかし、私は一意のポインターとして定義したので、それは私には正しくないようreticule_
で、それを指すポインターがさらに2つあります。それらはタイプではありませんReticule*
を使用しないでunique_ptr
ください。すべてを変更しますshared_ptr
が、単純なオブジェクトをワールドに追加する場合、それは意味がありません。