在像Haskell這樣的面向功能的語言中,可以將函數定義重載爲參數簽名的多個軸。 C++支持數量和類型的參數。其他語言支持的參數值,甚至後衛條款(代碼測試參數的條件。)例如在Haskell階乘實現:有沒有辦法根據參數值進行函數簽名匹配?
factorial :: (Integral a) => a -> a
factorial 0 = 1
factorial n = n * factorial (n - 1)
凡階乘的定義時參數是自定義的階乘0不同當參數是任何其他整數。
我還沒有在C++中找到這種功能,並且首先想到在語言中實現起來會很困難。進一步的思考讓我覺得它實際上會相當簡單,並且是語言的一個很好的補充,所以我必須忽略它。
有沒有什麼辦法可以在本地語法或模板中做到這一點?
C++模板可以專門用於整型常量,它與Haskell例子大致相同。 [這是用C++中的專用模板編寫的因子函數](http://stackoverflow.com/q/3082113/464709)。 –
是的,只有在編譯時已知參數值時纔可以使用模板元編程。除了通過虛擬方法調度以外,C++不能在運行時分派參數值。 – antlersoft
這不是兩個重載函數,它是函數'factorial x = case x of 0 => 1; n => n * factorial(n - 1)',在上面撒上覆合糖。 – molbdnilo