Я пробовал это, и некоторые его варианты:
template
class Ptr {
public:
Ptr(T* ptr) : p(ptr) {}
~Ptr() { if(p) delete p; }
template
Method operator ->* (Method method)
{
return p->*method;
}
private:
T *p;
};
class Foo {
public:
void foo(int) {}
int bar() { return 3; }
};
int main() {
Ptr p(new Foo());
void (Foo::*method)(int) = &Foo::foo;
int (Foo::*method2)() = &Foo::bar;
(p->*method)(5);
(p->*method2)();
return 0;
}
Но он не работает . Проблема в том, что я действительно не знаю, чего ожидать в качестве параметра или что возвращать. Стандарт на этот счет мне непонятен, и, поскольку Google не представил ничего полезного, думаю, я не одинок.
Изменить: Еще одна попытка, с C ++ 0x: http: // ideone.com/lMlyB