6

VisualStudio2010でコンパイルされるC++の強い型の整数が欲しいのですが。

一部のテンプレートで整数のように機能するには、このタイプが必要です。特に、次のことができる必要があります。

StrongInt x0(1);                  //construct it.
auto x1 = new StrongInt[100000];  //construct it without initialization
auto x2 = new StrongInt[10]();    //construct it with initialization 

私は次のようなものを見てきました:

class StrongInt
{ 
    int value;
public: 
    explicit StrongInt(int v) : value(v) {} 
    operator int () const { return value; } 
}; 

また

class StrongInt
{ 
    int value;
public: 
    StrongInt() : value(0) {} //fails 'construct it without initialization
    //StrongInt() {} //fails 'construct it with initialization
    explicit StrongInt(int v) : value(v) {} 
    operator int () const { return value; } 
}; 

これらはPODではないため、完全には機能しません。

4

2 に答える 2

1
StrongInt x0(1);

これらはPODではないため、完全には機能しません。

これら2つのことには互換性がありません。コンストラクター構文とPODnessの両方を持つことはできません。StrongInt x0 { 1 };PODの場合は、egまたは、、StrongInt x0 = { 1 };あるいはを使用する必要がありますStrongInt x0({ 1 });(これは非常に回りくどいコピー初期化です)。

于 2012-05-19T15:09:15.913 に答える
1

強く型付けされた整数が必要な場合は、列挙型を使用します。

enum StrongInt { _min = 0, _max = INT_MAX };

StrongInt x0 = StrongInt(1);
int i = x0;
于 2012-05-19T18:06:08.110 に答える