Как перегрузить оператор -> *?

Я пробовал это, и некоторые его варианты:

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

16
задан Fozi 7 April 2011 в 20:52
поделиться