Вернуть ссылку на объект, закешированную в unordered_map
Я думал что уже разобрался в ссылках C++, но видимо не до конца. Хочу сделать класс, который хранит набор свойств Еды. Белки, Жиры, Углеводы и все такое. Использую unordered_map: ключ просто число, по которому планирую в будущем доставать из локали итоговое наименование продукта, а значение набор конкретных характеристик продукта.
Вот текущий код, ругается что у свойств отсутствует конструктор копирования, но я на самом деле не хочу ничего копировать, я хочу чтобы он вернул саму ссылку.
class MealStandart final {
std::unordered_map<Naming, const MealProperties&> _mStandart;
public:
MealStandart() = default;
~MealStandart() = default;
void registerMeal(Naming naming, const MealProperties& mealProperties) {
_mStandart.insert( { naming, mealProperties } );
}
MealProperties& getMeal(Naming naming) const noexcept {
auto search = _mStandart.find(naming);
return search != _mStandart.end()
? search->second // тут ругается на отсутствие подходящего конструктора копирования
: nullptr;
}
};
Ответы (1 шт):
Автор решения: Sergey Inozemcev
→ Ссылка
Изменил возвращаемое значение на указатель. В таком виде все в порядке. Не знаю насколько правда это правильно.
class MealStandart final {
std::unordered_map<Naming, const MealProperties&> _mStandart;
public:
MealStandart() = default;
~MealStandart() = default;
void registerMeal(Naming naming, const MealProperties& mealProperties) {
_mStandart.insert( { naming, mealProperties } );
}
std::shared_ptr<MealProperties> getMeal(Naming naming) noexcept {
auto search = _mStandart.find(naming);
return search != _mStandart.end()
? std::make_shared<MealProperties>(search->second)
: nullptr;
}
};