我可以使用struct或enum来重载构造函数,它们似乎都做同样的工作。事实上,当使用每个可执行文件进行差异化时,从一个变为另一个甚至没有显示任何差异。但是,这是正确的吗?
此:
enum PointLocalCoord{ local };
enum PointGlobalCoord{ global };
class Point {
Point( const PointLocalCoord, const int x, const int y )
{ /* something */ }
Point( const PointGlobalCoord, const int x, const int y )
{ /* something else */ }
};
或者这个:
struct local{};
struct global{};
class Point {
Point( const local, const int x, const int y )
{ /* something */ }
Point( const global, const int x, const int y )
{ /* something else */ }
};
答案 0 :(得分:1)
两者都是在编译的意义上工作,但你应该根据逻辑选择一个。在你的情况下,我认为它应该是enum
,但略有不同:
enum PointCoordType
{
local,
global
};
class Point {
Point( PointCoordType, const int x, const int y )
{ /* something */ }
};
甚至有两种类型的Point
类:
LocalPoint : Point
和
GlobalPoint : Point
答案 1 :(得分:1)
两者都不好。您应该具有强语义类型,即使对于相同维度的数量,以及它们之间的转换函数:
struct LocalPoint { int x; int y; };
struct GlobalPoint { int x; int y; };
LocalPoint getLocal(GlobalPoint const & gp) { /* remainder? */ }
GlobalPoint getGlobal(LocalPoint const & lp, int offset_x, int offset_y);
现在,您可以直接为每个点类型创建构造函数。
这里的结果是语义点类比两个随机的,无意义的整数要好得多。