tgoop.com/cxx95/43
Create:
Last Update:
Last Update:
#advice
"Это как std::vector, но на 20% круче" 🕶
Часто приходится иметь дело с множеством объектов, и также как-то их переупорядочивать, находить в них объект по ключу, и так далее - в зависимости от бизнес-сценария.
Пусть у нас есть объекты класса Meal
(блюда ресторана 🍝), тогда обычно несколько блюд представляют так:
std::vector<Meal> meals;И также где-то находятся методы, которые делают то, что нужно
void SortAlphabetically(std::vector<Meal>& meals);Это подход уменьшает читабельность кода, потому что множество объектов живет как бы в отрыве от своих методов.
void SortByCostDesc(std::vector<Meal>& meals);
const Meal* FindMealById(const std::vector<Meal>& meals, std::string_view id);
Я несколько раз успешно применял подход - унаследоваться от std::vector и определить там все нужные методы. Получается примерно так:
class MealList : public std::vector<Meal> {И определения методов находятся в соответствующем
public:
static MealList ParseFromJson(const nlohmann::json& json);
void SortAlphabetically();
void SortByCostDesc();
const Meal* FindMealById(std::string_view id) const;
private:
MealList() = default;
};
.cpp
-файле.MealList
держит все методы "при себе" и при этом сохраняет всю остальную семантику std::vector
(например, возможность range-based for loop).BY C++95
Share with your friend now:
tgoop.com/cxx95/43