有没有办法可以创建一个带有int模板参数的函数,并且如果传递给函数的值小于10,那么该函数会产生编译时错误?
template <int number1> void reportErrorIfLessThan10() { #if(number1 < 10) #error the number is less than 10 #endif } int maint(int argc,char**argv) { reportErrorIfLessThan10<5>();//report an error! reportErrorIfLessThan10<12>();//ok return 0; }
解决方法
如果你不想要
Boost C++ Libraries魔法并想要裸骨……
template<bool> class static_check { }; template<> class static_check<false> { private: static_check(); }; #define StaticAssert(test) static_check<(test) != 0>()
然后使用StaticAssert.这对我来说是一个#define,因为我的代码需要在许多环境中运行,其中C不适用于模板,我需要将其备份到运行时断言.