C ++ не имеет такой функции, как all_instances
в python.
Вы должны управлять этим самостоятельно.
Сначала вам нужно хранить различные объекты класса в контейнере. (например, std::list<Person> persons
.
get_object_by_name
будет выглядеть так:
Person & get_object_by_name(const std::string &name) {
for (auto & person : persons) {
if (person.get_name() == name) {
return person;
}
}
}
Person
должен иметь метод get_name()
. В качестве альтернативы вы можете перегрузить оператор ==
. get_object_by_name
нужен доступ к persons
. Поэтому было бы неплохо поместить их в класс
class Persons{
public:
Person & get_object_by_name(const std::string &name);
// constructor to fill persons
// method to fill persons
private:
std::list<Person> persons;
};
Как указала СПД, выбор контейнера не тривиален. Если вы используете и std::vector
, и со временем он увеличивается, что приведет к перераспределению, и, таким образом, все возвращенные ссылки станут недействительными.