2013-12-10 32 views
0

如何以便於使用的方式實現運算符重載?Haxe運算符重載

enter image description here

正如你所看到的,把一個操作符重載的一類什麼都不做。另外,如果我使用「抽象」,我甚至不能在Dog上調用Bark()方法。
運算符重載不應該如此複雜和不可行。

+0

我不得不採取代碼的截圖,因爲它不斷抱怨我的格式。 – daniel1426

+0

這個文件很清楚。運算符重載僅用於摘要,摘要不會公開基礎字段。如果你有實際的問題要問,請做。如果您有具體的建議,請將其張貼在Haxe問題跟蹤器上。到目前爲止,這只是一個自以爲是的咆哮,發佈在互聯網上的幾個地方之一,不容忍他們;) – back2dos

+0

我的問題是非常清楚如何實現可行的運算符重載。 – daniel1426

回答

1

運算符重載僅適用於目前的摘要。您可以做的是創建宏並將其應用於您的上下文(執行操作的位置)並轉換表達式樹,以便操作映射到正確的方法。

+0

你是說我可以通過使用我需要的操作符來調用宏嗎?例如,如果我輸入「new X()+ new X()」,我可以讓'+'操作符觸發一個宏調用來轉換樹嗎? – daniel1426

+0

您可以使用包含方法執行轉換。例如,你可以在main()上添加一個metadata @:dogOperators,讓宏改變AST。 –

1

在haxe 3.1.3中,您可以在摘要之前添加@:forward以將基礎屬性和方法轉發到摘要。

@:forward // add this! 
abstract Dog2(Dog) to Dog from Dog 
{ 
    ... 
} 

new Dog2().Bark(); // no more error! 

您也可以將特定方法/屬性轉發給摘要。見Forwarding abstract fields

+0

轉發像運營商重載一樣如何? –

+0

不是。轉發是您可以對摘要進行操作以使Dog中的原始方法在Dog2中可用。所以Dog2變得和Dog一樣,增加了重載操作符。 – profound7

+0

但問了關於操作員超載的問題... –