В C#:
myObj.SomethingHappened += new MyEventHandler(HandleSomethingHappened);
void HandleSomethingHappened(string foo) {
}
Как играть в подобном тоне на C++? Как создать некий EventHandler которому можно кормить метод и потом где небудь из него брать собственно етот метод? Хочу создать клас, обьекту которого можно было бы как-небудь указывать что он будет делать а не с чем он будет что-небудь делать.
Используйте класс-оболочку Function для хранения метода, а его экземпляр храните в EventHandler. По поводу реализации Function: не знаю, как заставить объект вызываться как функцию (наверное, переопределение операторов). Хранение как поле объекта решает проблему вытаскивания метода куда-то ещё.
Я так понимаю вам нужно что-то подобное, в данном примере классу присваевается указатель на лямбду и выполняется действие
// Example program
#include <iostream>
class Method
{
public:
Method(int (*fptr)(int, int))
{
this->bar = fptr;
}
void SetFunction(int (*fptr)(int, int))
{
this->bar = fptr;
}
//В данном случае GetFunction это имя функции
int (*GetFunction())(int, int)
{
return this->bar;
}
private:
//Сам наш указатель вообщем то
int (*bar)(int, int);
};
int main()
{
//Пример с со сложением
Method test
(
[](int x, int y)
{
return x+y;
}
);
std::cout << test.GetFunction()(10,10) << std::endl;
//Пример с умножением
test.SetFunction
(
[](int x, int y)
{
return x*y;
}
);
std::cout << test.GetFunction()(10,10) << std::endl;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей