我想创建一个静态分配2^N 字节数组的结构,但我不希望此结构的用户将此大小指定为指数。例子:
my_stupid_array<char, 32> a1; // I want this!
my_stupid_array<char, 5> a2; // And not this...
我如何检查此模板参数是否为 2 的幂,并通过有关此的好消息警告用户?
我已经能够使用一个简单的模板来检查这一点:
template<int N>
struct is_power_of_two {
enum {val = (N >= 1) & !(N & (N - 1))};
};
但是,我无法用理智的消息警告用户。有任何想法吗?
编辑
修正了模棱两可的例子。
编辑
1 确实是 2 的幂。解决了这个问题!:)
编辑
使用 BOOST_STATIC_ASSERT,我在 GCC 中收到此代码的编译错误:
template<int N>
struct is_power_of_two {
enum {val = (N >= 1) & !(N & (N - 1))};
BOOST_STATIC_ASSERT(val);
};
错误
..\main.cpp:29:1: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>'
编辑
哦,我明白了。这是断言失败时我应该得到的消息。但这并没有给用户一些理智的信息。:(