6 Stimmen

Funktionszeiger auf Mitgliedsfunktionen in C++

Ich muss eine Methode aufrufen, die einen Funktionszeiger erwartet, aber in Wirklichkeit möchte ich ihr einen Funktor übergeben. Hier ist ein Beispiel für das, was ich zu tun versuche:

#include <iostream>
#include "boost/function.hpp"

typedef int (*myAdder)(int);

int adderFunction(int y) { return(2 + y); }

class adderClass {
  public:
    adderClass(int x) : _x(x) {}  
    int operator() (int y) { return(_x + y); }

  private:
    int _x;
};

void printer(myAdder h, int y) {
  std::cout << h(y) << std::endl;
}

int main() {
  myAdder f = adderFunction;

  adderClass *ac = new adderClass(2);
  boost::function1<int, int> g =
    std::bind1st(std::mem_fun(&adderClass::operator()), ac);

  std::cout << f(1) << std::endl;
  std::cout << g(2) << std::endl;
  printer(f, 3);
  printer(g, 4); // Is there a way to get this to work?
}

Ich habe keine Möglichkeit gefunden, die letzte Zeile, printer(g, 4), zu kompilieren. Gibt es eine Möglichkeit, dies zum Laufen zu bringen? Die einzigen Dinge, die ich kontrollieren kann, sind die Methode "main" und die Klasse "adderClass".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X