Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.150.89] |
|
Страницы: (77) « Первая ... 70 71 [72] 73 74 ... 76 77 ( Перейти к последнему сообщению ) |
Сообщ.
#1066
,
|
|
|
Цитата Qraizer @ Я уж понял, спасибо. Не что угодно, а символ, разрешённый к использованию в идентификаторах. Если это не так, то лексический разбор текста программы будет неуспешным. |
Сообщ.
#1067
,
|
|
|
Сообщ.
#1068
,
Сообщение отклонено: JoeUser -
|
Сообщ.
#1069
,
|
|
|
На волнах ACCU 2016 щупаю новый стандарт C++ включая готовящиеся фишки из 17-го. Ну, что хочется сказать... Язык сильно, очень сильно докрутили.
Когда-то давно я писал статью про вариадик-шаблоны в С++. И приводил пример композитора. На 14-ом стандрате этот же пример становится сильно-сильно короче: template<typename Op, typename ... FNs> struct Composer { public: template<typename O, typename ... Fs> Composer(O &&op, Fs&& ... fns) : m_op(std::forward<O>(op)) , m_fns(std::make_tuple(std::forward<Fs>(fns)...)) { } template<typename ... Args> auto operator ()(Args&& ... args) { return InvokeComposer(std::forward_as_tuple(std::forward<Args>(args)...), std::index_sequence_for<FNs ...>(), std::index_sequence_for<Args ...>()); } private: template<typename Args, size_t ... FnIdxs, size_t ... ArgIdxs> auto InvokeComposer(Args &&args, std::index_sequence<FnIdxs...>, std::index_sequence<ArgIdxs ...>) { return m_op(Apply<ArgIdxs ...>(std::get<FnIdxs>(m_fns), std::move(args))...); } template<size_t ... ArgIdxs, typename Fn, typename Args> auto Apply(Fn fn, Args &&args) { return fn(std::get<ArgIdxs>(std::forward<Args>(args))...); } Op m_op; std::tuple<FNs...> m_fns; }; template<typename Op, typename ... FNs> auto MakeComposer(Op &&op, FNs&& ... fns) { return Composer<std::decay_t<Op>, std::decay_t<FNs>...>(std::forward<Op>(op), std::forward<FNs>(fns) ...); } Проверял здесь. Можно оценить, насколько код становится проще... |
Сообщ.
#1070
,
|
|
|
Цитата Flex Ferrum @ вариадик-шаблоны в С++ Все ближе и ближе к D, синтаксис вот только все такой же неуклюжий. |
Сообщ.
#1071
,
|
|
|
Цитата applegame @ Цитата Flex Ferrum @ вариадик-шаблоны в С++ Все ближе и ближе к D, синтаксис вот только все такой же неуклюжий. Да, эти нелепые !() уже не исправить... |
Сообщ.
#1072
,
|
|
|
http://melpon.org/wandbox/permlink/seITYiZwrdPpLYas
Ну, ни GCC 6.1, ни из репозитория не компилирует, только шланг. Но, вообще, да: приходится использовать index_sequence и дополнительную функцию. И из-за особенностей вывода нельзя раскрыть в последовательность с использованием оператора << |
Сообщ.
#1073
,
|
|
|
Цитата Flex Ferrum @ На 14-ом стандрате этот же пример становится сильно-сильно короче Только читается с трудом. |
Сообщ.
#1074
,
|
|
|
Угу. Чем дальше, тем больше метакод походит на декларативный стиль. В императивном языке это смотрится неуместно.
|
Сообщ.
#1075
,
|
|
|
Цитата MyNameIsIgor @ Но, вообще, да: приходится использовать index_sequence и дополнительную функцию. И из-за особенностей вывода нельзя раскрыть в последовательность с использованием оператора << Да легко: #include <iostream> template<typename Head, typename ... Args> void print(Head h, Args ... args) { std::cout << h; (..., (std::cout << ", " << args)); } int main() { print('H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n'); } http://rextester.com/NCZCV64695 |
Сообщ.
#1076
,
|
|
|
Цитата Flex Ferrum @ Да легко Приведённый код и код по ссылке разные. Так что я не понял: что легко то? Добавлено Я знаю, что можно раскрывать через operator ... operator, но в приведённом мной примере это не получится из-за противоречий в интерфейсе вывода в стандартные потоки и правил раскрытия выражения. Понятно, что эти правила придуманы так, чтобы не получить просто текстовую подстановку а-ля макросы, но вот с чем-то вроде потоков придётся выкручиваться. |
Сообщ.
#1077
,
|
|
|
MyNameIsIgor, твой и мой код эквивалентны. В смысле, приводят к одному результату. Мой при этом несколько проще.
Добавлено Хотя, да. Вижу, чем отличаются. |
Сообщ.
#1078
,
|
|
|
Немного новостей:
https://habrahabr.ru/company/yandex/blog/30...ntent=link2post Фишки весьма вкусные, я бы сказал. |
Сообщ.
#1079
,
|
|
|
Цитата Flex Ferrum @ Немного новостей: Что понимается под Цитата ? гарантированный copy elision; |
Сообщ.
#1080
,
|
|
|
И никаких мультиметодов... Придётся вернуться в начало десятилетия и допилить.
|