Предположим, у нас есть объект, представляющий блок.
class Box {
public:
int length;
int width;
int height;
Box(int l, int w, int h);
~Box();
int area(const int l, const int w) const;
int volume(const int l, const int w, const int h) const;
};
Теперь давайте скажем, что в другом классе, в другом файле, у нас есть std::list<Box>
, который содержит n
блоков.Мы хотим отображать распечатки из этих полей по-разному.
- Сначала мы хотим распечатать их в порядке увеличения размера по длине.
- Затем мы хотим распечатать их в порядке увеличения размера по их ширине.
- Сейчас нас не волнует их высота, но, может быть, позже мы это сделаем.
Теперь std::list
имеет функцию-член sort()
, которая принимает функцию сравнения в качествеаргумент.Как мы можем изменить вышеупомянутый класс Box, чтобы мы могли вызывать sort()
в нашем списке с различными функциями сравнения?
В частности, можем ли мы определить три различные функции внутри класса box и просто передать их list.sort()
?Лучше ли определять функции сравнения глобально вне класса, интуитивно, связывая их с классом, кажется лучше, но почему бы это не так?В целом, каков «лучший» способ добиться этого?