2
我正在閱讀Caffe的源代碼,我很好奇caffe爲什麼使用#define來創建caffe.cpp中的函數。爲什麼caffe使用#define宏來創建函數
#define RegisterBrewFunction(func) \
namespace { \
class __Registerer_##func { \
public: /* NOLINT */ \
__Registerer_##func() { \
g_brew_map[#func] = &func; \
} \
}; \
__Registerer_##func g_registerer_##func; \
}
它們使用RegisterBrewFunction來註冊函數,必須有一些優點。他們可以使用其他方式來決定調用哪個函數,誰能告訴我爲什麼要用這種方式編寫代碼。
因此,當我們收到參數時,爲什麼不只是使用if和else子句來決定調用哪個函數,爲什麼我們應該提前註冊這些函數。 –
@zhichai - 因爲if/else幾乎要求你事先知道你可能想調用哪些函數。註冊點在於,當您構建代碼庫並添加函數時,您不必返回到if/else鏈並重寫它。 –
謝謝,我想我有你。 –