我想要一个在Visual Studio 2010中编译的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,所以它们不起作用。
答案 0 :(得分:1)
StrongInt x0(1);
由于这些东西不是POD,所以它们不起作用。
这两件事是不兼容的:你不能同时拥有构造函数语法和PODness。对于POD,您需要使用例如POD。 StrongInt x0 { 1 };
或StrongInt x0 = { 1 };
,甚至是StrongInt x0({ 1 });
(这是一个非常全面的复制初始化)。
答案 1 :(得分:1)
当我需要强类型整数时,我只使用枚举类型。
enum StrongInt { _min = 0, _max = INT_MAX };
StrongInt x0 = StrongInt(1);
int i = x0;