我尝试了这个方法,以及一些变体:
template<class T>
class Ptr {
public:
Ptr(T* ptr) : p(ptr) {}
~Ptr() { if(p) delete p; }
template<class Method>
Method operator ->* (Method method)
{
return p->*method;
}
private:
T *p;
};
class Foo {
public:
void foo(int) {}
int bar() { return 3; }
};
int main() {
Ptr<Foo> p(new Foo());
void (Foo::*method)(int) = &Foo::foo;
int (Foo::*method2)() = &Foo::bar;
(p->*method)(5);
(p->*method2)();
return 0;
}
但是它不起作用。问题在于我不知道期望什么参数或返回什么。我对此标准无法理解,而且由于谷歌没有提供有用的信息,我猜我不是唯一一个这样想的人。
编辑: 另一种尝试,使用C++0x:http://ideone.com/lMlyB
operator->*
的功能都会在那里。 :| - Xeo(*p).*method
要简单得多,尽管我希望能够轻松支持->*
。 - Fozi