Boost.Bind非静态成员

时间:2012-04-01 12:58:47

标签: boost boost-bind boost-function

我有以下代码,其中Boost.Local使用函数回调来加载mo文件。这个函数对我来说叫做findMo,我正在尝试将它绑定到一个对象,这样我就可以保留我放在moFinder的私有成员中的副作用。

class moFinder
{
  public:
    moFinder(string const& wantedFormat)
    : format(wantedFormat)
    {
      // ...
    }

    std::vector<char> findMo(std::string const& filePath, std::string const& encoding)
    {
      // ...
    }
};

std::locale createLocale(string const& name, string const& customTranslation,
  string const& path, string const& domain, string const& pathFormat)
{
  // ...

  namespace blg = boost::locale::gnu_gettext;
  blg::messages_info info;
  info.paths.push_back(path);
  info.domains.push_back(blg::messages_info::domain(domain));

  moFinder finder(pathFormat);

  blg::messages_info::callback_type callbackFunc;
  callbackFunc = boost::bind(moFinder::findMo, boost::ref(finder));

  info.callback = callbackFunc;

  // ...
}

编译时出现以下错误:

  

错误:无效使用非静态成员函数'std :: vector moFinder :: findMo(const std :: string&amp;,const std :: string&amp;)'

在我调用boost :: bind。

的行

我该怎么做才能得到这个错误?

1 个答案:

答案 0 :(得分:5)

您在成员地址&moFinder::findMo之前缺少运营商的地址。此外,您需要使用boost::mem_fn将成员函数包装到函数对象中,并且您缺少占位符。的所有功能于所有:

boost::bind(boost::mem_fn(&moFinder::findMo,), boost::ref(finder), _1, _2);
                                               // or &finder