考虑下面的代码。
int value1 = BOOST_BINARY( 100 111000 01 1 110 );
有人可以解释一下BOOST_BINARY如何在那里计算int值吗?
最佳答案
这是非常非常复杂的。该BOOST库使用由其他宏构造的宏。
我将向您介绍一些预处理器编程的简化示例:
简化的问题:
如何使宏在rest的开头添加0或1-如下例所示:
CAT ( 0 1 ) --> 01
CAT ( 1 100 ) --> 1100
所以-某种程度上
,
必须按顺序放在两个参数之间。好吧,我做到了:// start point - this is our desired format
#define CATS(a,b) a##b
// helper macro to invoke preprocessor on result of a
#define CALLP(a) a
// some helper symbols to build CATS()
#define CATB (
#define CATE )
#define CATSN CATS
// I use that only 0 or 1 is expected at the beginning:
// CATS ( 0,
#define CAT_B0 CATSN CATB 0,
// CATS ( 1,
#define CAT_B1 CATSN CATB 1,
// the final macro:
// Example:
// CAT(0 XXX) --> CALLP( CAT_B ## 0 XXX ) )
// --> CALLP(CAT_B0 XXX ) --> CALLP(CATSN ( 0, XXX ) )
// --> CALLP( CATS(0, XXX) ) --> CATS(0,XXX) --> 0##XXX -> 0XXX
#define CAT(tt) CALLP (CAT_B ## tt CATE)
它确实有效(至少在gcc上有效):http://ideone.com/EKlTGt
现在想象一下BOOST员工在他们的图书馆中所做的工作有多复杂?是的,它非常复杂-但是请使用我介绍的此类预处理器技巧,也许还有其他许多技巧-我今天第一次(不管信不信由你)都在看这个BOOST库http://www.boost.org/doc/libs/1_46_1/boost/utility/binary.hpp的源代码。
关于c++ - BOOST_BINARY宏如何解析空间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13200264/