Source
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
//
namespace kimi_boost
{
//这个模板类只有声明,没有定义
//注意:这里没有{}
//所以如果定义这个类型的对象将会失败
template <bool> struct STATIC_ASSERTION_FAILURE2;
//一个true类型的完全特化,并且带定义
template <> struct STATIC_ASSERTION_FAILURE2<true>{};
template<int x> struct static_assert_test2{};
#ifdef BOOST_STATIC_ASSERT
#undef BOOST_STATIC_ASSERT
#define BOOST_STATIC_ASSERT(B) typedef static_assert_test2< sizeof(STATIC_ASSERTION_FAILURE2< (bool)( B ) >) > nothing##__COUNTER__
#endif //BOOST_STATIC_ASSERT
}
Test code
void static_assert_test()
{
using namespace kimi_boost;
BOOST_STATIC_ASSERT(1);
BOOST_STATIC_ASSERT(1 == 1);
BOOST_STATIC_ASSERT(true);
BOOST_STATIC_ASSERT(0); //compile error
STATIC_ASSERTION_FAILURE2<true> asd;
STATIC_ASSERTION_FAILURE2<false> asd2;
}
Output
Compile time error
本文通过具体的源代码示例介绍了Boost库中静态断言的实现原理。重点展示了如何使用Boost的STATIC_ASSERTION_FAILURE2模板来实现编译时的条件判断,并通过BOOST_STATIC_ASSERT宏进行类型检查,确保表达式的真假性,若表达式为假,则会在编译时引发错误。
1874

被折叠的 条评论
为什么被折叠?



