Прямо сейчас я использую std :: pair для представления 2d-точки в c ++. Однако меня раздражает необходимость писать
typedef std::pair<double, double> Point;
Point difference = Point(p2.first - p1.first,
p2.second - p1.second);
вместо возможности перегрузки оператора + и оператора -.
Итак, мой вопрос в том, чтобы сделать мой класс Point, я должен
- Публично наследовать от std :: pair и добавлять свои собственные функции-члены? Это хорошо, потому что весь мой код может остаться прежним. Я не собираюсь делать что-то вроде
std::pair<double, double>* p = new Point;
, поэтому мне не нужно беспокоиться о таких вещах, как виртуальные деструкторы.
- Сверните мой собственный класс Point, что раздражает, так как я дублирую функциональность std :: pair, однако я «делаю это чисто».
- Создайте шаблонную специализацию оператора + и оператора- для std :: pair, что, правда, я не помню, чтобы они входили в исходные файлы или заголовочные файлы.
Полагаю, это для обсуждения, я бы очень хотел сделать №1, но я не знаю, плохая ли это идея, поскольку я слышал, что наследование от STL - нет-нет.