MySQL的钩子函数

2019-05-11  本文已影响0人  斜不靠谱

rpl_handler.h中有个钩子函数的宏定义(percona-server-5.7.21-21)

#define RUN_HOOK(group, hook, args)             \
  (group ##_delegate->is_empty() ?              \
   0 : group ##_delegate->hook args)

这个mysql监听线程,半同步复制插件都是通过这个钩子加进去的

第一眼看上去懵逼了,##_delegate是什么鬼,查看了c++宏定义语法才明白
“##” 在宏定义中的作用则是将宏定义的多个形参成一个实际参数名
例如 (void) RUN_HOOK(server_state, before_handle_connection, (NULL));
即可展开为

  (server_state_delegate->is_empty() ?              \
   0 : server_state_delegate->before_handle_connection(NULL))

并且 server_state_delegate 是作为参数名存在的,也就是其表示实际的对象或指针,可以进行方法调用

上一篇下一篇

猜你喜欢

热点阅读