为什么caffe使用#define宏来创建函数

zhi*_*hai 2 c++ macros caffe

我正在阅读Caffe的源代码,我很好奇为什么caffe使用#define来创建像caffe.cpp这样的函数.

#define RegisterBrewFunction(func) \
namespace { \
class __Registerer_##func { \
 public: /* NOLINT */ \
  __Registerer_##func() { \
    g_brew_map[#func] = &func; \
  } \
}; \
__Registerer_##func g_registerer_##func; \
}
Run Code Online (Sandbox Code Playgroud)

他们使用RegisterBrewFunction来注册函数,必须有一些优点.他们可以使用if else来决定调用哪个函数,任何人都可以告诉我为什么以这种方式编写代码.

Pet*_*ker 5

宏不只是创建一个函数; 它创建了一个类定义,该类的构造函数以及该类型的对象,所有这些都在匿名命名空间中.所有代码的作用是将用户定义函数的地址添加到函数func数据库中.虽然这是很多代码,但它的目的是让用户更容易注册函数.