Pass-und Aufruf einer member-Funktion (boost::bind / boost::function?)

Ich habe eine wahrscheinlich embarassingly einfaches problem: übergeben und der Aufruf einer member-Funktion einer Klasse. Ich weiß, ich will BOOST bind (und-oder-Funktion), aber ich habe nicht wirklich Begriffen, um es noch.

Den folgenden code kompiliert und ausgeführt, mit dem problem. Aber wenn ich ändern möchten die "f3" - Funktion, um eine nicht-statische Klasse Funktion, dann beginnt der Spaß:

#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;
}

Nun, nach der änderung

static void f3(uint32_t x);

zu

void f3(uint32_t x);

den compiler ist nicht glücklich, und sagt mir "Fehler: keine passende Funktion für Aufruf von" Test::f2()'"

Gelesen hatte, durch eine Reihe von SO posts zu boost::bind und boost::function, ich glaube, ich muss zum ändern der definition von f2() und wie f1 () - Aufrufe f2() geben die f3-Taste() als Ziel zu nennen, aber davon abgesehen, ... über jede Kombination von boost::bind und boost-Funktion, die ich habe versucht, kläglich versagt zu kompilieren.

Wie muss ich dies schreiben? Als bonus-Frage: gibt es irgendwelche einfachen einführenden liest auf boost::bind und boost::function? Die BOOST-docs nicht wirklich mir da helfen.

B.

InformationsquelleAutor BaCh | 2011-03-09

Schreibe einen Kommentar