在像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