1

我可以使用结构或枚举来重载构造函数,它们似乎都在做同样的工作。实际上,从一个更改为另一个甚至在使用每个来区分两个可执行文件时都不会显示任何差异。但是,哪个合适?

这:

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 */  }
};
4

2 回答 2

1

两者都可以编译,但您应该根据逻辑选择一个。在你的情况下,我认为它应该是一个enum,但略有不同:

enum PointCoordType
{
    local,
    global
};
class Point {
    Point( PointCoordType, const int x, const int y )
        {  /* something */  }
};

甚至有两种类型的Point类:

LocalPoint : Point

GlobalPoint : Point
于 2012-11-18T23:57:58.430 回答
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);

现在您可以直接为每个点类型创建构造函数。

这里的结果是语义点类比两个随机的、无意义的整数要好得多。

于 2012-11-19T00:06:13.113 回答