Yeni oluşturulan belirli bir sınıfın her nesnesine, kopyalananlara değil, benzersiz bir kimlik atamak istediğimi varsayalım. Ben böyle bir şey için olabilir:std :: vektörü, başka bir sınıfın bir örneğine bağlı olarak belirli bir yapıcıyı çağırmak için nasıl zorlanır
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;
}
};
ve ben Ama bunun yerine genel değişken olmasının
vector<Element> list;
yapabilirsiniz stl kütüphane ile çalışacak, başka bir nesnenin içine next_id olması gerekir:
Element *element = context->createElement();
:
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;
}
};
Yani bu şekilde kullanabilir
Ama bunu vektörle kullanamıyorum.
std :: vector öğesinin yapıcısını
context->createElement()gibi bir işlev aracılığıyla çağırmak istiyorum, yani 'context' nesnesine bağlı olarak bir şey ve yeniden boyutlandırırken normal kopya kurucuyu çağır.
Bunu yapmanın bir yolu var mı? Örneğin, bir functor örneğini vektöre veya başka bir şeye geçirerek? ...
DÜZENLEME: Bir noktayı açıklığa kavuşturmak için. Yeni bir context
nesnesi oluşturarak ve daha sonra element
s'yi bu yeni context
ile ilişkilendirerek yeni bir kimlik dizisi oluşturabildiğim için başka bir Context
sınıfının kullanılmasından bahsetmiştim. Örneğin eşdeğer sorunu bu gibi görünen bir Eleman sınıf var olacaktır:
class Element {
Context *context;
public:
Element(Context *context) : context(context){
}
Element(const Element &other){
this->context = other.context;
}
};
ve yapıcı çağırdığında vector
bir context
nesneyi belirtmek için bir yol aramaya.
İlk örneğinizi tutun ve "next_id" öğesini "Element" öğesinin statik "haline getirin. – user657267