[cpp]STL map zawierajaca pointery na metody

0
#include <map>
using namespace std;

class zlo
{
  public:
  void Event1()
  {
   	cout<<"aaaA";
  }
};

int main()
{
	typedef void (zlo::*Event)();

	map<String,Event> commands;
	commands["1"] = &zlo::Event1;
	Event my_ptr = commands["1"];
	my_ptr();


	return 0;
}

Error ktory dostej przy probie kompilacji:

[BCC32 Error] File3.cpp(27): E2314 Call of nonfunction

0

Metodę trzeba wywołać na rzecz końkretnego obiektu, odwołując się operatorem .* lub w przypadku pointera ->*, pamiętając oczywiście o argumentach. Wyjątek od tej zasady to metody statyczne - te funkcjonują jak regularne funkcje. Masz prosty, durny (ale mi się nudzi...) przykład:

#include <map>
#include <string>
#include <iostream>
using namespace std;

struct Zuo {
	typedef void (Zuo::*mem_fun_t)();

	void zue() { cout << "zue"; }
	void zuo() { cout <<  str <<  " zuo"; }
	Zuo (const string &_str) : str(_str) {}
protected:
	string str;
};

int main() {
	map<string, Zuo::mem_fun_t> methods;
	Zuo zuo("kare");

	methods["zue"] = &Zuo::zue;
	methods["zuo"] = &Zuo::zuo;

	(zuo.*methods["zue"])();
	cout << ", ";
	(zuo.*methods["zuo"])();
	cout << endl;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1