我可以在C ++中创建一个强类型的整数吗?

时间:2012-05-19 14:46:42

标签: c++ visual-studio-2010 visual-c++ c++11

我想要一个在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,所以它们不起作用。

2 个答案:

答案 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;