【问题标题】:no. of arguments in boost::bind不。 boost::bind 中的参数
【发布时间】:2011-02-10 10:20:01
【问题描述】:

我们最多可以传递多少个参数给 boost::bind()

【问题讨论】:

    标签: c++ boost-bind


    【解决方案1】:

    【讨论】:

    • 如果您使用超过 9 个参数调用函数,那么您需要重新考虑您的设计!
    • @GrahamS 我认为 boost.lambda 绑定也最多需要 9 个。我用于函数式编程的库 Boost.Spirit.Phoenix 有默认的 10 w/a 宏来定义上限。
    • 我写了一个 IOC 系统,每个参数都需要模板来构造对象。我认为它最终高达 12。可能太多了
    • @GrahamS :有时您只需要使用一些商业外部库中的标头即可,无法与供应商讨论设计。
    【解决方案2】:

    即使不能切换到 C++11,也应该考虑从 boost::function 切换到 TR1 函数,这是 C++11 的预览版

    基本上,最初的 boost::function 成为了 C++ 标准库的一部分,现在它是用可变参数模板定义的。简而言之,这意味着不再有硬性限制(但如果您需要超出 _19 的内容,则可能需要定义额外的占位符变量)

    要从 boost::function 切换到 std::tr1,请执行以下操作

    查找所有出现的#include <boost/function>#include <boost/bind> 并将它们替换为:

     #include <tr1/functional>
     using std::tr1::function;
     using std::tr1::bind;
     using std::tr1::placeholders::_1;
     using std::tr1::placeholders::_2;
    ...
    

    这应该可以作为替代品。如果你以后碰巧切换到 C++11,就扔 去掉“tr1”部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多