新しく作成された特定のクラスのすべてのオブジェクトに一意のIDを割り当てたいが、コピーするクラスには割り当てない。私のようなものにできます。他のクラスのインスタンスに応じてstd :: vectorが特定のコンストラクタを呼び出す方法
int next_id = 0; // ugly global variable
class Element {
int id;
public:
Element(){
this->id = next_id++;
}
Element(const Element &other){
this->id = other.id;
}
};
をし、それが、私はしかし、その代わりにグローバル変数を持つの
vector<Element> list;
を行うことができますSTLライブラリで動作します、私は別のオブジェクトの内部NEXT_IDしておく必要があります。
class Context {
int next_id;
public:
Element *createElement(){
Element *element = new Element(this->next_id++);
return element;
}
};
class Element {
int id;
public:
Element(int id) : id(id) {
}
Element(const Element &other){
this->id = other.id;
}
};
だから私はこのようにそれを使用することができます。
Element *element = context->createElement();
しかし、私はベクトルと一緒に使用することはできません。
私はstd :: vectorに、
context->createElement()のような関数、すなわち 'context'オブジェクトに依存する何らかの関数を使ってElementのコンストラクタを呼び出し、サイズ変更時には通常のコンストラクタを呼び出したいと思います。
これを行う方法はありますか?たとえば、ファンクタのインスタンスをベクターなどに渡すと、...
編集:ポイントを明確にする。新しいcontext
オブジェクトを作成し、後でelement
をこの新しいcontext
に関連付けることによって、ユーザが新しい一連のIDを作成できるようにするために、別のContext
クラスの使用について言及します。
class Element {
Context *context;
public:
Element(Context *context) : context(context){
}
Element(const Element &other){
this->context = other.context;
}
};
、それはコンストラクタを呼び出すときvector
にcontext
オブジェクトを指定する方法を探して:たとえば同等の問題は、このように見える要素のクラスを持っているだろう。
最初の例を残して、 'next_id'を' Element'の 'static'メンバーにしてください。 – user657267