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

时间:2017-03-06 03:54:22

标签: 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; \
}

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

1 个答案:

答案 0 :(得分:5)

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