Передать и вызвать функцию-член (boost :: bind / boost :: функция?)

У меня, вероятно, до неприличия простая проблема: передать и вызвать функцию-член в классе. Я знаю, что хочу использовать BOOST bind (и / или функцию), но я еще не совсем понял ее концепцию.

Следующий код компилируется и выполняется с проблемами. Но когда я хочу изменить функцию «f3» на функцию нестатического класса, тогда начинается самое интересное:

#include <iostream>
#include <inttypes.h> 
#include <boost/bind.hpp>
#include <boost/function.hpp>

class Test
{
public:
  void f1();
private:
  void f2(void (*callfunc)(uint32_t));
  static void f3(uint32_t x);
};

void Test::f1(){
  f2(f3);
}

void Test::f2(void (*callfunc)(uint32_t)){
  (*callfunc)(42);
}

void Test::f3(uint32_t x){
  std::cout << "x: " << x << std::endl;
}

int main(int argc, char ** argv)
{
  Test ct;
  ct.f1();
  return 0;
}

Теперь, после изменения

static void f3(uint32_t x);

на

void f3(uint32_t x);

, компилятор недоволен и сообщает мне «error: нет соответствующей функции для вызова 'Test :: f2 ()' "

Прочитав ряд сообщений SO относительно boost :: bind и boost :: function, Я думаю, мне нужно изменить определение f2 () и то, как f1 () вызывает f2 (), давая f3 () в качестве цели для вызова, но помимо этого ... о каждой комбинации функций boost :: bind и boost, которые я пробовал ужасно не компилируется.

Как мне это написать? В качестве бонусного вопроса: есть ли какие-нибудь простые вводные чтения по boost :: bind и boost :: function? Документы BOOST мне не особо помогли.

B.

6
задан BaCh 9 March 2011 в 11:23
поделиться