Angenommen, ich möchte jedem Objekt einer bestimmten neu erstellten Klasse eine eindeutige ID zuweisen, aber nicht denen, die kopiert werden. Ich so etwas wie könnte:Erzwingen std :: Vektor Aufruf eines bestimmten Konstruktors in Abhängigkeit von einer Instanz einer anderen Klasse
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;
}
};
und es würde mit stl Bibliothek arbeitet, kann ich
vector<Element> list;
tun, sondern stattdessen eine globale Variable zu haben, muß ich in einem anderen Objekt next_id haben:
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;
}
};
So kann ich es auf diese Weise verwenden:
Element *element = context->createElement();
Aber ich kann es nicht mit Vektor verwenden.
Ich möchte std :: vector rufen Sie den Konstruktor des Elements über eine Funktion wie
context->createElement(), dh etwas abhängig von einem 'Kontext' -Objekt, und rufen Sie die regulären Kopie Konstruktor beim Ändern der Größe.
Gibt es eine Möglichkeit, dies zu tun? Zum Beispiel durch Übergeben einer Funktorinstanz an Vektor oder etwas anderes? ...
EDIT: Um einen Punkt zu verdeutlichen. Ich erwähne die Verwendung einer anderen Context
Klasse, weil ich möchte, dass der Benutzer in der Lage ist, eine neue Serie von ID zu erstellen, indem er ein neues Objekt erstellt und später element
s zu dieser neuen context
hinzufügt. Zum Beispiel wäre ein äquivalentes Problem ein Element der Klasse zu haben, die wie folgt aussieht:
class Element {
Context *context;
public:
Element(Context *context) : context(context){
}
Element(const Element &other){
this->context = other.context;
}
};
und die Suche nach einem Weg, um ein context
Objekt vector
angeben, wenn es den Konstruktor aufruft.
Behalten Sie Ihr erstes Beispiel und machen 'next_id' ein' statisches' Element von 'Element'. – user657267