为什么caffe使用#define宏来创建函数
why caffe use #define macros to create function
我正在阅读 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来决定调用哪个函数,谁能告诉我为什么要这样写代码
宏不只是创建一个函数;它创建了一个 class 定义、一个 class 的构造函数和一个该类型的对象,所有这些都在匿名命名空间中。所有这些代码的作用是将用户定义函数 func
的地址添加到函数数据库中。虽然代码很多,但目的是让用户更容易注册函数。
我正在阅读 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来决定调用哪个函数,谁能告诉我为什么要这样写代码
宏不只是创建一个函数;它创建了一个 class 定义、一个 class 的构造函数和一个该类型的对象,所有这些都在匿名命名空间中。所有这些代码的作用是将用户定义函数 func
的地址添加到函数数据库中。虽然代码很多,但目的是让用户更容易注册函数。