Zitat von
sniper_w:
Und was die Methoden zeiger angeht, die Methoden, auf die man zeigt, dürfen leider nicht member functions sein sodern in global scope definiert sein. Oder ?
Üblicherweise ja. Aber du kannst dir einen eigenen functor basteln:
Code:
template <class ClassType, typename ReturnType, typename Parameter1>
class functor_1
{
public:
// declare functor
typedef ReturnType (ClassType::*Callback)(Parameter1);
// setup functor
functor_1(ClassType *some_object, Callback some_method)
this->_object = some_object;
this->_callback = some_method;
};
// call functor
ReturnType
operator()(Parameter1 param1)
{
return (_object->*_callback)(param1);
}
private
ClassType *_object;
Callback _callback;
}
Ist zwar ungetestet, sollte aber funktionieren. Verwenden tut man ein derartiges Template wie folgt:
Code:
ClassA a;
ClassB b;
functor_1<ClassA, int, int> *functor;
int
ClassB::emit_event()
{
return functor(3);
}
int
ClassA::some_method(int i)
{
std::cout << i;
return ++i;
}
int
main()
{
functor = new functor_1<ClassA, int, int>(&a, &ClassA::some_method);
int blubb = b.emit_event();
}