Нестатический член Boost.Bind - PullRequest
1 голос
/ 01 апреля 2012

У меня есть следующий код, в котором 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 &, const std :: string &)'

В строке, где я вызываю boost :: bind.

Что я делаю, чтобы заслужить эту ошибку?

1 Ответ

5 голосов
/ 01 апреля 2012

Вам не хватает адреса оператора перед адресом участника: &moFinder::findMo.Кроме того, вам нужно будет использовать boost::mem_fn, чтобы обернуть функцию-член в объект функции, и вам не хватает заполнителей.Всего:

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