我正在阅读用 C++ 编写的机器学习库 dlib。我在一个定义了一堆宏的头文件中遇到了一个代码。我很难理解以下代码
#ifndef BOOST_JOIN
#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
#define BOOST_DO_JOIN2( X, Y ) X##Y
#endif
// a bunch of other code
namespace dlib
{
template <bool value> struct compile_time_assert;
template <> struct compile_time_assert<true> { enum {value=1}; };
// a bunch of other definitions
}
#define COMPILE_TIME_ASSERT(expression) \
DLIB_NO_WARN_UNUSED typedef char BOOST_JOIN(DLIB_CTA, __LINE__)[::dlib::compile_time_assert<(bool)(expression)>::value]
我不明白的是
上面代码的最后一行是做什么的?
typedef char
这里太奇怪了,我完全不明白。- 替换
BOOST_JOIN
后就变成DLIB_CTA__LINE__[1]
了,为什么是数组呢?合法吗?