我正在写一个Point
类(在 3d 空间中)并且一直想知道创建原点的最佳方法是什么。这是基本类(取自 Andy 的示例,以防有人想知道基本实现是什么):
struct Point
{
constexpr Point(double x_, double y_, double z_) : x(x_), y(y_), z(z_) { }
double x;
double y;
double z;
};
获得原点的第一种方法是定义一个constexpr
变量:
constexpr Point origin = { 0.0, 0.0, 0.0 };
第二个是定义一个新的类型和重载算法,如果它们在使用原点计算时可以从优化中受益(假设我constexpr
为 编写了一个构造函数Point
):
struct Origin: public Point
{
constexpr Origin():
Point(0.0, 0.0, 0.0)
{}
};
constexpr Origin origin;
虽然第一种方法看起来更简单且不易出错,但我想知道第二种方法看起来是否是个好主意,以及它是否有一些我没有看到的陷阱。
编辑:考虑参考库,我注意到 CGAL 使用了类似的东西:
class Origin {};
const Origin ORIGIN;