Приложение, в котором я работаю, в настоящее время имеет большое количество структур, которые содержат данные, которые поступают из различных источников, таких как базы данных и файлы. Например, например:
struct A
{
float val1;
std::string val2;
int val3;
bool operator < (const A& other) const;
};
Для обработки эти структуры хранятся в STL-контейнерах, таких как карты, и поэтому им нужен оператор сравнения. Все они одинаковы и с использованием простой логической логики они могут быть написаны так:
bool A:operator < (const A& o) const {
return val1 < o.val1 ||
(val1 == o.val1 && ( val2 < o.val2 ||
(val2 == o.val2 && ( val3 < o.val3 ) ) );
}
Это кажется эффективным, но имеет несколько недостатков:
- Эти выражения становятся огромными, если структуры составляют десяток или более членов.
- Грубо писать и поддерживать, если члены меняются.
- Это необходимо для каждой структуры отдельно.
Есть ли более удобный способ сравнения таких структур?