C ++ 11为函数声明引入了一种新语法
auto func(T rhs, U lhs) -> V
这是为了解决旧C ++标准中出现的一些带有函数模板的问题。阅读这篇简短的维基百科文章部分,了解有关问题的详细信息:
> http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax
我的问题是,D是否面临同样的问题?如果是这样,它是如何解决的(如果有的话)?
答案 0 :(得分:9)
在D中,编译器可以为您推导出返回类型。因此,不需要-> V
语法。
auto func(T, U)(T lhs, U rhs) { return lhs + rhs; }
或者如果你想更具体(但最好让编译器用auto
找出类型!)
typeof(T.init + U.init) func(T, U)(T lhs, U rhs) { return lhs + rhs; }
与C ++一样,你不能在那个地方使用typeof(lhs + rhs)
。
答案 1 :(得分:0)
我不是百分百肯定,但我相信您可以使用typeof(<expression>)
语法。因此,应该可以执行以下操作:typeof(rhs+lhs) func(T rhs, U lhs) { /* body */ }