D如何用返回类型解决这个问题?

时间:2011-11-07 10:33:16

标签: function syntax d

C ++ 11为函数声明引入了一种新语法

auto func(T rhs, U lhs) -> V

这是为了解决旧C ++标准中出现的一些带有函数模板的问题。阅读这篇简短的维基百科文章部分,了解有关问题的详细信息:
> http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax

我的问题是,D是否面临同样的问题?如果是这样,它是如何解决的(如果有的话)?

2 个答案:

答案 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 */ }