如何以便於使用的方式實現運算符重載?Haxe運算符重載
正如你所看到的,把一個操作符重載的一類什麼都不做。另外,如果我使用「抽象」,我甚至不能在Dog上調用Bark()方法。
運算符重載不應該如此複雜和不可行。
如何以便於使用的方式實現運算符重載?Haxe運算符重載
正如你所看到的,把一個操作符重載的一類什麼都不做。另外,如果我使用「抽象」,我甚至不能在Dog上調用Bark()方法。
運算符重載不應該如此複雜和不可行。
運算符重載僅適用於目前的摘要。您可以做的是創建宏並將其應用於您的上下文(執行操作的位置)並轉換表達式樹,以便操作映射到正確的方法。
你是說我可以通過使用我需要的操作符來調用宏嗎?例如,如果我輸入「new X()+ new X()」,我可以讓'+'操作符觸發一個宏調用來轉換樹嗎? – daniel1426
您可以使用包含方法執行轉換。例如,你可以在main()上添加一個metadata @:dogOperators,讓宏改變AST。 –
在haxe 3.1.3中,您可以在摘要之前添加@:forward以將基礎屬性和方法轉發到摘要。
@:forward // add this!
abstract Dog2(Dog) to Dog from Dog
{
...
}
new Dog2().Bark(); // no more error!
您也可以將特定方法/屬性轉發給摘要。見Forwarding abstract fields
轉發像運營商重載一樣如何? –
不是。轉發是您可以對摘要進行操作以使Dog中的原始方法在Dog2中可用。所以Dog2變得和Dog一樣,增加了重載操作符。 – profound7
但問了關於操作員超載的問題... –
我不得不採取代碼的截圖,因爲它不斷抱怨我的格式。 – daniel1426
這個文件很清楚。運算符重載僅用於摘要,摘要不會公開基礎字段。如果你有實際的問題要問,請做。如果您有具體的建議,請將其張貼在Haxe問題跟蹤器上。到目前爲止,這只是一個自以爲是的咆哮,發佈在互聯網上的幾個地方之一,不容忍他們;) – back2dos
我的問題是非常清楚如何實現可行的運算符重載。 – daniel1426