我会假设这是C++标准中涵盖的,但我一直无法找到它。我正在编写一些模板,它们将对它们的非类型积分参数进行算术运算,并且我发现在template <int x> Foo
这样的模板中需要参数'x'的相当于MAX_INT
。如何确定模板非类型整型常量参数中的位数?
理想情况下,有人可以将我指向标准中的段落(如果存在的话),该段落给出了整型模板参数大小的允许范围,以及确定特定实现上实际位数的任何方式。
-
澄清:它将作为元编程库的一部分在类型系统内进行数学运算的模板。 'int'永远不会被实例化,并且永远不会占用运行时存储空间。在很多方面,它类似于预处理器所做的数学运算,在这种情况下,我知道整型不能保证与'int'的大小相同。我正在寻找的是标准的一部分,它说明了类型是否相同,如果不是,编译期间模板整型参数使用了多少位。
我已经在使用boost.mpl。如果它解决了我的问题,我还没有找到它。 integer_traits库对我来说似乎也没用,因为这些值不是整型常量表达式,所以不能在模板数学中使用。 – swestrup 2010-10-13 20:52:19
boost :: integer_traits :: const_min和boost :: integer_traits :: const_max绝对是编译时常量。对于[在多种类型之间进行选择](http://www.boost.org/doc/libs/1_44_0/libs/mpl/doc/refmanual/type-selection.html)(或值,但它们表示为包含值(在boost.mpl中)或值[基于某些条件](http://www.boost.org/doc/libs/1_44_0/libs/mpl/doc/refmanual/comparisons.html)([包括逻辑运算]( http://www.boost.org/doc/libs/1_44_0/libs/mpl/doc/refmanual/logical-operations.html))boost.mpl非常适合。 –
Vinzenz
2010-10-13 21:07:53
也有[按位操作,其他人可以看到元函数列表](http://www.boost.org/doc/libs/1_44_0/libs/mpl/doc/refmanual/metafunctions.html) – Vinzenz 2010-10-13 21:09:23