Как D решает эту проблему с типами возврата? - PullRequest
6 голосов
/ 07 ноября 2011

C ++ 11 представил новый синтаксис для объявления функции,

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

Это должно было решить некоторые проблемы, которые возникали в старом стандарте C ++ с шаблонами функций.Прочтите этот короткий раздел статьи в Википедии, чтобы узнать подробнее о проблеме:
> http://en.wikipedia.org/wiki/C%2B%2B11#Alternative_function_syntax

У меня вопрос: сталкивается ли D с той же проблемой?Если так, как это исправить (если вообще)?

Ответы [ 2 ]

9 голосов
/ 07 ноября 2011

В 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) в этом месте.

0 голосов
/ 07 ноября 2011

Я не уверен на 100%, но я считаю, что вы можете использовать синтаксис typeof(<expression>).Так что должно быть возможно сделать что-то вроде: typeof(rhs+lhs) func(T rhs, U lhs) { /* body */ }

...