1

構造体または列挙型のいずれかを使用してコンストラクターをオーバーロードできますが、どちらも同じ仕事をしているようです。実際、一方から他方に変更しても、それぞれを使用して 2 つの実行可能ファイルを比較しても、違いはまったくわかりません。しかし、どれが適切ですか?

これ:

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

または、2 種類の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);

各ポイント タイプのコンストラクタを直接作成できるようになりました。

ここでの結論は、セマンティック ポイント クラスは 2 つのランダムで意味のない整数よりもはるかに優れているということです。

于 2012-11-19T00:06:13.113 に答える