【发布时间】:2012-05-19 14:46:42
【问题描述】:
我想要一个在 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 的,所以它们不能很好地工作。
【问题讨论】:
-
嗯,它需要一个无参数的数组构造函数,它需要一个赋值运算符来分配实际值,然后就是这样。我错过了什么吗?
-
@EitanT -- 在 C++11 中,他们回收了
auto关键字来表示新的东西 -- 现在它的意思是“自动推断类型”。在这里使用它有点傻,但是对于难以键入的复杂模板类型名称来说,它确实很方便。 -
@EitanT:我确实看到了 [visual-studio-2010] 标签,VC10 编译器确实支持新的
auto。 -
@EitanT:如果您没有听说过,此代码现在符合标准。 C++11 标签并不是绝对必要的(而且似乎毫无意义,因为
auto的使用或不使用不会以任何方式影响问题)。 -
@BenVoigt 我还没有更新“改进的”
auto关键字,但是在 C++03 中它不能编译,所以我觉得有必要将它标记为 C++ 11.但你说得对,它与问题本身无关。
标签: c++ visual-studio-2010 visual-c++ c++11