這就是我要做的:強制編譯時錯誤檢查模板類型以恆定
#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
?
boost有自己的STATIC_ASSERT版本http://www.boost.org/doc/libs/1_61_0/doc/html/boost_staticassert.html –
@πάνταῥεῖ:這可能會解決我的問題,但我發現一個' enable_if'實現[這裏](http://en.cppreference.com/w/cpp/types/enable_if)。用法:'template :: type> struct name ...'(我正準備發佈它作爲答案:D) –
Jahid