10

おそらくテンプレートを使用して、C ++の厳密なtypedefのイディオムはありますか?

何かのようなもの:

template <class base_type, int N> struct new_type{
    base_type p;
    explicit new_type(base_type i = base_type()) : p(i) {}
};

typedef new_type<int, __LINE__> x_coordinate;
typedef new_type<int, __LINE__> y_coordinate;

だから私はこのようなものをコンパイル時エラーにすることができます:

x_coordinate x(5);
y_coordinate y(6);

x = y; // whoops

そこ__LINE__には問題があるように見えますが、各タイプを一意に保つためだけに定数のセットを手動で作成する必要はありません。

4

3 に答える 3

7

私は自分のプロジェクトで似たようなものを使用しています。int の代わりに型のタグ付けを使用するのは私だけです。私の特定のアプリケーションでうまく機能します。

template <class base_type, class tag> class new_type{     
  public:   
    explicit new_type(base_type i = base_type()) : p(i) {}

    //
    // All sorts of constructors and overloaded operators
    // to make it behave like built-in type
    //

  private:
     base_type p;
};

typedef new_type<int, class TAG_x_coordinate> x_coordinate;
typedef new_type<int, class TAG_y_coordinate> y_coordinate;

TAG_* クラスはどこにも定義する必要がないことに注意してください。それらは単なるタグです。

x_coordinate x (1);
y_coordinate y (2);

x = y; // error
于 2013-02-21T16:42:45.623 に答える
2

いいえ。次の標準 (C++14、またはおそらく C++17) に移行するという提案がありますが、C++11 には含まれていません。

于 2013-02-21T15:24:20.447 に答える