现在我正在使用 std::pair 来表示 C++ 中的二维点。但是,我对不得不写作感到恼火
typedef std::pair<double, double> Point;
Point difference = Point(p2.first - p1.first,
p2.second - p1.second);
而不是能够重载 operator+ 和 operator-。
所以,我的问题是,要让我的点课,我应该
- 公开派生自 std::pair 并添加我自己的成员函数?这很好,因为我所有的代码都可以保持不变。我不会做类似的事情,
std::pair<double, double>* p = new Point;
所以我不必担心虚拟析构函数之类的事情。 - 滚动我自己的 Point 类,这很烦人,因为我正在复制 std::pair 的功能,但是我“以纯粹的方式做”。
- 为 std::pair 制作 operator+ 和 operator- 的模板特化,诚然我不记得它们是放在源文件还是头文件中。
我想这是有争议的,我真的很想做#1,但我不知道这是否是一个坏主意,因为我听说从 STL 继承是一个禁忌。