【发布时间】:2010-10-16 12:48:11
【问题描述】:
我正在使用一个众所周知的模板来允许二进制常量
template< unsigned long long N >
struct binary
{
enum { value = (N % 10) + 2 * binary< N / 10 > :: value } ;
};
template<>
struct binary< 0 >
{
enum { value = 0 } ;
};
因此您可以执行类似二进制::value 的操作。不幸的是,这对于 unsigned long long 有 20 位数字的限制。
谁有更好的解决方案?
【问题讨论】:
-
20 的限制可能取决于编译器。这取决于它将容忍多少模板递归。一些现代编译器将允许您传入一个参数来设置最大模板递归深度。
-
我虽然限制是由于您可以存储在无符号长长中的十进制位数,因为它基本上采用 十进制 数字 101011011 并将其转换为二进制,是吗?
-
Pax:是的,至少对于我正在使用的 GCC。
-
Binary literals?的可能重复
标签: c++ templates binary constants