我想这一点,和它的一些变化:如何重载 - > *运算符?
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;
}
但doesn't work。问题是我真的不知道作为一个参数期望什么或返回什么。这个标准对我来说是不可理解的,而且由于Google没有提供任何有用的信息,我想我并不孤单。
编辑:闯闯,用C++ 0x中:http://ideone.com/lMlyB
听起来很可怕。我得看一看。 – Fozi 2011-04-07 20:50:49
@Fozi:相信我,就是这样。尽管我找不到完整的实现,但您的智能指针只需要从某个基地继承而来,并且所有'operator - > *'功能都将存在。 :| – Xeo 2011-04-07 20:53:14
我实际上有一个Delegate类可能可以做到这一点,但它相当重量级,所以我想避免将它作为临时返回。 '(* p)。* method'要简单得多,尽管我希望我可以轻松地支持' - > *'。 – Fozi 2011-04-07 21:00:25