Кто-нибудь знает, будет ли реализован subj? По крайней мере, класс автопамяти для них? Спасибо!
Вывод типа вложенных функций D
comment
Пожалуйста, будьте более конкретными. Что вы имеете в виду под сабж?
- person Jonathan M Davis   schedule 18.11.2010
comment
Я имею в виду, что констр. void foo() { auto bar() { return 3.14; }; } не будет компилироваться, так как bar не может иметь класс автоматического хранения. Мне просто было любопытно, планируется ли хотя бы такое улучшение.
- person Target-san   schedule 18.11.2010
Ответы (1)
Существуют различные проблемы с автоматическими функциями в целом, поэтому вполне может быть, что вы не можете
void main()
{
auto bar() { return "hello world"; }
writeln(bar());
}
из-за ошибки с авто, а не так, как задумано. Я не уверен, каковы точные планы на этот счет, хотя я думаю, что вы должны иметь возможность использовать auto в качестве возвращаемого типа вложенной функции. В любом случае есть запрос на улучшение.
Однако независимо от того, работает ли auto с вложенными функциями, вы можете объявить делегат аналогичным образом:
void main()
{
auto bar = () { return "hello world"; };
writeln(bar());
}
Таким образом, основная функциональность по-прежнему присутствует, даже если точный синтаксис, который вы искали, в настоящее время не работает.
person
Jonathan M Davis
schedule
18.11.2010
Если я правильно понимаю, делегат или ключевое слово функции не нужны?
- person Target-san; 18.11.2010
Возможно, было бы лучше иметь этот
const bar = ...
, чтобы он действовал больше как реальная функция WRT lvalues.
- person BCS; 18.11.2010
@Target-san Обычно вы используете ключевое слово функции или делегата только в том случае, если хотите, чтобы лямбда-функция была той или иной, и обычно в этом нет необходимости.
- person Jonathan M Davis; 18.11.2010
Кстати, если вы опустите ключевое слово, оно всегда будет делегатом, поэтому форсирование будет только одним способом.
- person BCS; 18.11.2010
Я не уверен, что спецификация требует, чтобы это всегда был делегат, если вы не помечаете его как функцию - теоретически компилятор должен быть в состоянии понять это для вас - но в настоящее время он всегда генерирует делегат из что я могу сказать. Хотя в какой-то момент это может измениться. Я не думаю, что это хорошая идея полагаться на то, что это делегат или указатель на функцию, если вы не укажете, что это такое. Однако в большинстве случаев я не думаю, что это имеет особое значение. Если вам действительно не все равно, вы всегда можете отметить это.
- person Jonathan M Davis; 22.11.2010