2^N 바이트 배열의 배열을 정적으로 할당하는 구조체를 만들고 싶지만이 구조체의 사용자가이 크기를 지수로 지정하는 것을 원하지 않습니다. 예 :이 템플릿 매개 변수는 두 및의 전력이에 대한 좋은 메시지와 함께 사용자 경고를해서 인 경우템플릿 매개 변수의 출력이 2인지 확인하려면 어떻게합니까?
my_stupid_array<char, 32> a1; // I want this!
my_stupid_array<char, 5> a2; // And not this...
어떻게 확인합니까?
나는 간단한 템플릿이 확인 할 수있었습니다 :
template<int N>
struct is_power_of_two {
enum {val = (N >= 1) & !(N & (N - 1))};
};
그러나, 나는 제정신 메시지와 함께 이것에 대해 사용자에게 경고 드릴 수 없습니다. 어떤 아이디어?
EDIT
모호한 예 수정.
편집
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>'
EDIT
아, 알겠습니다. 저것은 나가 주장이 실패 할 때 얻는 가정 된 메시지이었다. 그러나 그것은 사용자에게 정통 메시지를주지 못합니다.:(구조에
8은 2의 거듭 제곱입니다 ... –
이것은 매개 변수의 지수의 예를 의미합니다. 2^8 = 256 – jrok
>'my_stupid_array a2; // 그리고 이건 ... 왜? –
triclosan