У меня, вероятно, до неприличия простая проблема: передать и вызвать функцию-член в классе. Я знаю, что хочу использовать 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.