2012-01-03 99 views
4

可能重複:
How to overload the ->* operator?使用運營商的 - > *

什麼是運營商->*的含義是什麼?

以及它如何在重載中有用?

+0

參見http://stackoverflow.com/questions/2696864/are-free-operator-overloads-evil。我不認爲這是上述的重複,但也不是一個很好的問題。 – Potatoswatter 2012-01-03 20:11:10

+0

我要回答,但這裏是jist - 'operator - > *'定義了一個二元運算符,就像'operator +','operator *'等一樣。它比所有其他二元運算符具有更高的優先級,所以它是有用的在形成成員訪問時,但低於'operator []'。它被廣泛認爲是模糊的,可能會混淆用戶。 – Potatoswatter 2012-01-03 20:18:47

回答

1

operator->*是針對成員的指針。

struct foo{ 
    void bar(){} 
}; 

int main(){ 
    typedef void (foo:*foo_memptr)(); 
    foo_memptr pfunc = &foo::bar; 
    foo f; 
    foo* pf = &f; 
    (f.*pfunc)(); // on object or reference 
    (pf->*pfunc)(); // on pointer to object 
} 

重載它通常只智能指針是有用的,甚至因爲它是非常複雜和相同的功能可以通過((*pf).*pfunc)()實現他們不這樣做。斯科特邁爾斯甚至寫道a PDF on how to do it