【问题标题】:why caffe use #define macros to create function为什么 caffe 使用#define 宏来创建函数
【发布时间】:2017-07-25 19:54:09
【问题描述】:

我正在阅读 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 来决定调用哪个函数,谁能告诉我为什么要这样写代码。

【问题讨论】:

    标签: c++ macros caffe


    【解决方案1】:

    宏不只是创建一个函数;它在匿名命名空间中创建一个类定义、该类的构造函数和该类型的对象。所有这些代码的效果是将用户定义函数func 的地址添加到函数数据库中。虽然代码很多,但它旨在让用户更轻松地注册函数。

    【讨论】:

    • 那么当我们收到args时,为什么不直接用if和else子句来决定调用哪个函数,为什么要提前注册这些函数呢。
    • @zhichai -- 因为 if/else 几乎要求您提前知道您可能想要调用哪些函数。注册的要点是,当您构建代码库并添加函数时,您不必返回 if/else 链并重写它。
    • 谢谢,我想我明白了。
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多