2010-04-04 64 views
-1

假設我有:C++速記操作符 - >運算符()

Foo foo; 

是有一個速記此?

foo.operator->().operator()(1, 2); 
+4

::臉掌:: **沒有。** ::搖搖頭難以置信:: – dmckee 2010-04-04 00:38:23

+0

我編輯你的問題。這是你的意思嗎? – Potatoswatter 2010-04-04 00:44:30

+3

@dmckee:嘿,很好。 – jalf 2010-04-04 00:49:31

回答

3

假設你居然意味着foo.operator->().operator()(1, 2),並且您可以控制類Foo,簡單的形式是(*foo)(1, 2)。它要求定義operator*,但由於我們通常預期foo->bar等同於(*foo).bar,這似乎是合理的。

如果您的Foo是某種智能指針類,它指向定義operator()的對象,這將是調用對象operator()最簡潔的方式。

但是沒有更多細節(並且沒有您提供的表達式實際上是有效的C++ - 沒有辦法像您寫的operator(1, 2)一樣有效),所以不可能回答您的問題。我只是猜測你想做什麼。

6

嗯......是的。該形式將如下

foo.operator->()(1, 2) 

至於消除operator ->部分......從你提供的到目前爲止,這是很難說的信息,但如果它的實現方式,我可以猜到它的實現(從你的表情來判斷),那麼你無法消除它。

在C++中,表達式中重載的->運算符的使用被解釋爲重複的重載->調用鏈,最終以調用的內置->結束。這意味着在某些時候重載的->必須返回一個指針。你的超載->顯然不會返回一個指針。所以,爲了使用它,你別無選擇,只能將其明確地拼出爲operator ->()

+0

+1,用於正確指定使用'operator->'所需的內容。我沒有意識到一個兼容的程序可以使用非指針'operator->',但它是可能的! – Potatoswatter 2010-04-04 00:57:19

0

哦,不,但是,假設你有寫權限類,你可以定義調用operator()的另一個成員函數,然後你會碰到這樣的:

foo->myfunc(1,2); 

你發現你自己在這個位置是一個跡象,表明你(或者寫這個類的人)對於操作符重載有點太可愛了。

+0

錯誤...不,它不起作用。 OP的重載' - >'返回一個非指針。這立即意味着任何將它稱爲「foo - > ...」的嘗試都是不合格的。它根本不會編譯。 (如果重載的' - >'返回某個重載' - >'的東西,那麼它有可能工作,但是如果沒有任何額外的信息,這可能是一個猜測。) – AnT 2010-04-04 01:32:31

+0

我看到 - f.operator - >()。myFunc(1,2)的作品。 我認爲這強調了這一點,這似乎是運算符重載的一個糟糕的用法。 – JohnMcG 2010-04-04 01:43:18