回答
假設你居然意味着foo.operator->().operator()(1, 2)
,並且您可以控制類Foo
,簡單的形式是(*foo)(1, 2)
。它要求定義operator*
,但由於我們通常預期foo->bar
等同於(*foo).bar
,這似乎是合理的。
如果您的Foo
是某種智能指針類,它指向定義operator()
的對象,這將是調用對象operator()
最簡潔的方式。
但是沒有更多細節(並且沒有您提供的表達式實際上是有效的C++ - 沒有辦法像您寫的operator(1, 2)
一樣有效),所以不可能回答您的問題。我只是猜測你想做什麼。
嗯......是的。該短形式將如下
foo.operator->()(1, 2)
至於消除operator ->
部分......從你提供的到目前爲止,這是很難說的信息,但如果它的實現方式,我可以猜到它的實現(從你的表情來判斷),那麼你無法消除它。
在C++中,表達式中重載的->
運算符的使用被解釋爲重複的重載->
調用鏈,最終以調用的內置->
結束。這意味着在某些時候重載的->
必須返回一個指針。你的超載->
顯然不會返回一個指針。所以,爲了使用它,你別無選擇,只能將其明確地拼出爲operator ->()
。
+1,用於正確指定使用'operator->'所需的內容。我沒有意識到一個兼容的程序可以使用非指針'operator->',但它是可能的! – Potatoswatter 2010-04-04 00:57:19
哦,不,但是,假設你有寫權限類,你可以定義調用operator()的另一個成員函數,然後你會碰到這樣的:
foo->myfunc(1,2);
你發現你自己在這個位置是一個跡象,表明你(或者寫這個類的人)對於操作符重載有點太可愛了。
- 1. C編程!算術運算符操作
- 2. C++重載運算符<<和運算符>>
- 3. C++運算符「<" and ">」
- 4. C++'>'按位運算符
- 5. 三元運算符作爲C宏中三元運算符的操作數
- 6. Groovy速記if else運算符
- 7. forEach的速記/運算符,地圖?
- 8. =>運算符vs =運算符
- 9. C++ << >>運算符
- 10. 什麼是c運算符>>
- 11. >>運算符重載... C++
- 12. 使用點運算符,而不是 - >運算符C++
- 13. C++讀取使用操作符>>
- 14. C++運算符少使用轉換操作符
- 15. C++:重載操作符。好奇類型轉換運算符
- 16. 速記加法運算符與速記If/Else - Javascript
- 17. Haskell(>>)運算符
- 18. 使用運算符>>
- 19. 字符串重載運算符「>>」
- 20. C++運算符 ''
- 21. 運算符[] [] C++
- 22. Java中的速記運算符如何與普通運算符不同?
- 23. 實現|| =和&& =操作符:運算符實現沒有匹配運算符聲明
- 24. 重載操作符>>()
- 25. 運算符>>和運算符>>>在java中有什麼區別?
- 26. 優先的C++運算符 「&」 和 「 - >」
- 27. 「00」運算符後缺少操作數
- 28. Python中位運算符 '&' 操作
- 29. |運算符在LINQ中的操作?
- 30. >>操作符/操作數/修飾符是做什麼的?
::臉掌:: **沒有。** ::搖搖頭難以置信:: – dmckee 2010-04-04 00:38:23
我編輯你的問題。這是你的意思嗎? – Potatoswatter 2010-04-04 00:44:30
@dmckee:嘿,很好。 – jalf 2010-04-04 00:49:31