Информация об изменениях

Сообщение Re[10]: [trick] C++14 return unnamed structure от 12.10.2015 15:30

Изменено 12.10.2015 15:31 Went

Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, Went, Вы писали:


W>>Я просто не могу представить реального случая, где бы подобный подход мог иметь смысл.


BZ>а пол моему у тебя просто отторжение непривычного. использовать это очень просто:


BZ>
BZ>auto extended_fread()
BZ>{
BZ>   return {errcode=e, bytes=b};
BZ>}

BZ>main()
BZ>{
BZ>   auto r = extended_fread();
BZ>   if (r.errcode) {...}
BZ>   ptr += r.bytes;
BZ>}
BZ>


BZ>в результате получаем просто функцию, возвращающую несколько поименованных результатов.

Да. Но при этом:
1. Вынуждены делать функцию инлайн.
2. Не сможем заменить функцию на виртуальную.
3. Не сможем объединить возвращаемый тип с подобными функциями (тут просто просится какой-то struct read_result;}
4. Ограничены одной точкой выхода.
5. Можем получить неочевидые проблемы с выводимыми типами переменных-членов этой структуры.

Но. Опять же — это все до тех пор, пока нет статической рефлексии. Как только оная появится, ценность подобных записей заметно увеличится, и их существование будет оправдано.
Здравствуйте, BulatZiganshin, Вы писали:
BZ>в результате получаем просто функцию, возвращающую несколько поименованных результатов.
Да. Но при этом:
1. Вынуждены делать функцию инлайн.
2. Не сможем заменить функцию на виртуальную.
3. Не сможем объединить возвращаемый тип с подобными функциями (тут просто просится какой-то struct read_result;}
4. Ограничены одной точкой выхода.
5. Можем получить неочевидые проблемы с выводимыми типами переменных-членов этой структуры.

Но. Опять же — это все до тех пор, пока нет статической рефлексии. Как только оная появится, ценность подобных записей заметно увеличится, и их существование будет оправдано.