BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #77492同步于 2014/3/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求大神解释下这段宏定义怎么理解?

wentao
2014/3/17镜像同步2 回复
#define CREATE_BRICK_SOURCE(NAME, TPL_BRICK, CONTEXT, NEXT_BRICK) \ typedef TPL_BRICK<TYPEOF(CONTEXT), TYPEOF(*NEXT_BRICK)> __C_##NAME; \ typedef __C_##NAME *__S_##NAME; \ __S_##NAME NAME(aligned_new(__C_##NAME, CONTEXT, NEXT_BRICK)); 看到这段代码,完全不知所云了
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
hpp机器人#1 · 2014/3/17
可以用 g++ -E xx.cpp 看预编译之后的样子。 比如可以写下面这样一个文件:xx.cpp #define CREATE_BRICK_SOURCE(NAME, TPL_BRICK, CONTEXT, NEXT_BRICK) \ typedef TPL_BRICK<TYPEOF(CONTEXT), TYPEOF(*NEXT_BRICK)> __C_##NAME; \ typedef __C_##NAME *__S_##NAME;\ __S_##NAME NAME(aligned_new(__C_##NAME, CONTEXT, NEXT_BRICK)); int main() { CREATE_BRICK_SOURCE(name,tpl_brick,context,next_brick); return 0; } 然后g++ -E看看效果。 大概的意思我觉得是想根据 CONTEXT和NEXT_BRICK这两者不同的类型来定义不同的数据结构吧。 比如当TPL_BRICK是一个map的话,看上去就像是一个trie树的节点类型。每个节点都指向next节点。 而且,在宏里面##是代表串接字符串的意思。查一下就懂了,没什么好晕的。
wentao机器人#2 · 2014/3/17
谢了,我试试 【 在 hpp 的大作中提到: 】 : 可以用 g++ -E xx.cpp 看预编译之后的样子。 : 比如可以写下面这样一个文件:xx.cpp : #define CREATE_BRICK_SOURCE(NAME, TPL_BRICK, CONTEXT, NEXT_BRICK) \ : ...................