我正在阅读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来决定调用哪个函数,任何人都可以告诉我为什么以这种方式编写代码。
答案 0 :(得分:5)
宏不仅仅是创建一个功能;它创建了一个类定义,该类的构造函数以及该类型的对象,所有这些都在匿名命名空间中。所有代码的作用是将用户定义函数func
的地址添加到函数数据库中。虽然这是很多代码,但它的目的是让用户更容易注册功能。