这就是我想要做的事情:
#define SIZE 8
template<class T>
struct name {
T a;
name() {
#if SIZE != sizeof(T)*8
#error Size mismatch
#endif
}
};
int main(void)
{
name<uint16_t> a; //Size mismatch
return 0;
}
我希望它在使用模板化结构时大小不匹配时给出编译时错误,即name<uint16_t>
应该给出编译时错误,因为它不符合要求(sizeof(T)*8 == 8)
可以在<C++11
完成吗?
答案 0 :(得分:2)
你可以断言:
static_assert(SIZE != sizeof(T)*8, "!");
您的代码变为:
#include<cstddef>
#define SIZE 8
template<class T>
struct name {
static_assert(SIZE != sizeof(T)*8, "!");
T a;
};
int main(void) {
name<uint16_t> a;
return 0;
}
修改强>
这个答案适用于C ++ 11及更高版本 要求是当我写这篇文章时,无论如何我都会留给更多的读者。