[C++] Wskaźniki na funkcję

Mam klasę w której potrzebuje stworzyć wskaźnik na funkcję w innej klasie. Mam problem z tym jak stworzyć konstruktor, żeby to poprawnie działało.

W tej klasie chce mieć wskaźnik na funkcję z innej klasy:

class MenuG

{

public:


	std::string nazwa;

	void (*fun)(MenuG *menu);



	MenuG(void);

	MenuG(std::string jakie_pole);

	MenuG(std::string jakie_pole, void (next)(MenuG *menu));

	~MenuG(void);


};

Tutaj jest jeden z konstruktorów tej klasy:

MenuG::MenuG(std::string jakie_pole, void (next)(MenuG *menu))

{


	nazwa=jakie_pole;

	fun= *next;


}

A tutaj próba stworzenia przykładowego obiektu tej klasy:

MenuG KMenu = ("Lata", Admin.ShowMenu(PoziomMenu) );

Admin jest obiektem innej klasy.

Słowo wyjaśnienia co do programu, może będzie pomocne.

Mam klasę MenuG, obiekty tej klasy mają służyć za zapis poszczególnych menu, mam również klasę FunkcjeObslugi i w tej klasie mam m.in. funkcję odpowiadającą za wyświetlanie dla użytkownika tego co znajduje się w obiektach klasy MenuG. Obiekt Admin jest obiektem klasy FunkcjeObslugi i chce żebym w klasie MenuG mógł przechowywać wskaźniki na funkcje, które będą wskazywały na poszczególne funkcje klasy FunkcjeOblugi lub klasy Ustawienia, zależnie od potrzeb.

Czy ktoś może pomóc mi to rozwikłać?

Prosty przykład jak przekazać wskaźnik do funkcji składowej:

#include 


using namespace std;


class A{

  public:

    int f() const{

      return 1337;

    }

};


class B{

  public:

    B(const A &a, int (A::*ptr)() const){

      cout<<(a.*ptr)()<
    }

};


int main(int argc, char *argv[]){

  A a;

  B b(a, &A::f);

  return 0;

}

Dlaczego tak? Bo wskaźnik do funkcji innej niż statyczna jest bezużyteczny bez obiektu. Ale prawie nigdy nie ma potrzeby uciekania się do tak dzikich zachowań ;).

Jeżeli możesz korzystać z c++11:

http://en.cppreference.com/w/cpp/utilit … ator%28%29

http://en.cppreference.com/w/cpp/utilit … ional/bind

Jeżeli nie możesz korzystać z c++11, ale możesz z boost:

http://www.boost.org/doc/libs/1_49_0/do … ction.html

http://www.boost.org/doc/libs/1_49_0/li … /bind.html

Jeżeli żadne z powyższych, to pozostaje to co napisał Linux_to_syf^^