我想在我的代码中清楚地区分3D和2D点.显而易见的解决方案是拥有单独的类.
另一方面,从z = 0到2D点的3D点的转换非常常见.因此,我想使用一个公共基类,这样我就可以在内存中进行这些转换.为了明确区分类型,我想禁止隐式转换为该基类.那可行吗?
或者是否可能有不同的方法来创建具有类似功能的不同类型?
如果您想访问 3d 矢量的 2d 部分而不进行任何复制,那么实际上只有一种明智的解决方案。
class Vector2d { ... };
class Vector3d {
Vector2d part2d;
double z;
public:
Vector2d& as2d() { return part2d; }
};
Run Code Online (Sandbox Code Playgroud)
任何基于继承的恶作剧都很可能导致糟糕的设计、未定义的行为或两者兼而有之。