Size: a a a

2020 August 26

AP

Antony Polukhin in pro.cxx
Немного шутеечек от стандартной библиотеки libstdc++ https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/std/chrono#L2316
источник

AP

Alexander Potapov in pro.cxx
Кароче: работает - не трогай
источник

AG

Anton Glukhov in pro.cxx
Привет! А подскажите пожалуйста где можно найти хорошую реализацию FSM для встраиваемых систем. Из требований и возможностей: C++ 17, Система с ~128KB RAM и неограниченным Flash, без heap allocation, с возможностью передачи параметров через контекст событий(контекстом). Boost со своей реализацией не хочется трогать. Склоняюсь больше к использованию variant
источник

AG

Anton Glukhov in pro.cxx
Вот тут смотрел предлагаемые реализации. Не знаю насколько подходит для жизни. https://youtu.be/gKbORJtnVu8
источник
2020 August 27

DS

David Sorokin in pro.cxx
Danya
Как уже было сказано, обычно концепты используют для входных параметров
Единственным, как мне кажется, решением тут может быть кучка static_assert'ов, на вызов функции при разных шаблонных параметрах
Спасибо! Мне уже выше написали, что нужно пересмотреть саму идею, что лучше ограничивать входные параметры, а не выход функции. Соглашусь с вами, хотя для целей само-документирования кода было бы здорово и ограничить выход. Хотел что-то такое замутить с автоматическим placeholder, но выражение типа "template<typename MapItem, typename MapFn> Activity<MapItem> auto map(MapFn&&)" проставляет совсем не тот MapItem. Он почему-то получается дважды вложенным в Activity, а так было бы красиво. Тут я совсем не понимаю, как работают placeholder и связка концепта с auto. Видео посмотрю
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
Спасибо! Мне уже выше написали, что нужно пересмотреть саму идею, что лучше ограничивать входные параметры, а не выход функции. Соглашусь с вами, хотя для целей само-документирования кода было бы здорово и ограничить выход. Хотел что-то такое замутить с автоматическим placeholder, но выражение типа "template<typename MapItem, typename MapFn> Activity<MapItem> auto map(MapFn&&)" проставляет совсем не тот MapItem. Он почему-то получается дважды вложенным в Activity, а так было бы красиво. Тут я совсем не понимаю, как работают placeholder и связка концепта с auto. Видео посмотрю
Считайте, что концепт это точный аналог интерфейса, только для компильтайма
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
Спасибо! Мне уже выше написали, что нужно пересмотреть саму идею, что лучше ограничивать входные параметры, а не выход функции. Соглашусь с вами, хотя для целей само-документирования кода было бы здорово и ограничить выход. Хотел что-то такое замутить с автоматическим placeholder, но выражение типа "template<typename MapItem, typename MapFn> Activity<MapItem> auto map(MapFn&&)" проставляет совсем не тот MapItem. Он почему-то получается дважды вложенным в Activity, а так было бы красиво. Тут я совсем не понимаю, как работают placeholder и связка концепта с auto. Видео посмотрю
Если я вас правильно понимаю, вы хотите записать прямо в язык что-то вроде
/*unspecified but explicitly convertible to bool*/ foo()
Но язык пока не может ничего сделать с подобной конструкцией, для него foo возвращает конкретный тип, никакого unspecified
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
Спасибо! Мне уже выше написали, что нужно пересмотреть саму идею, что лучше ограничивать входные параметры, а не выход функции. Соглашусь с вами, хотя для целей само-документирования кода было бы здорово и ограничить выход. Хотел что-то такое замутить с автоматическим placeholder, но выражение типа "template<typename MapItem, typename MapFn> Activity<MapItem> auto map(MapFn&&)" проставляет совсем не тот MapItem. Он почему-то получается дважды вложенным в Activity, а так было бы красиво. Тут я совсем не понимаю, как работают placeholder и связка концепта с auto. Видео посмотрю
Если я все еще правильно понимаю, то, что вы хотите сделать, для С++ должно быть чем-то вроде теоремы вида "foo на таком множестве условий возвращает такие аргументы", но этот уровень просветления в С++ еще даже не приближается
источник

DS

David Sorokin in pro.cxx
Заглянул в исходники ranges для GCC. Там обычное дело, когда выходной результат автовыводится через auto. Видимо, так и мне следует делать. Значит, накладываем ограничения только на вход функций. Ну, это тоже шаг вперед, причем огромный.
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
Заглянул в исходники ranges для GCC. Там обычное дело, когда выходной результат автовыводится через auto. Видимо, так и мне следует делать. Значит, накладываем ограничения только на вход функций. Ну, это тоже шаг вперед, причем огромный.
Ты понял, что я тебе написал? :)
https://t.me/ProCxx/401590
источник

CD

Constantine Drozdov in pro.cxx
"ограничение на выход функции" это обязательство из документации, для языка оно вообще не имеет смысла
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
Заглянул в исходники ranges для GCC. Там обычное дело, когда выходной результат автовыводится через auto. Видимо, так и мне следует делать. Значит, накладываем ограничения только на вход функций. Ну, это тоже шаг вперед, причем огромный.
У тебя, кажется, какое-то заблуждение вроде "сигнатура функции является формой её документации" в голове.
источник

DS

David Sorokin in pro.cxx
Не надо сочинять! Это вполне ожидаемая вещь. Но нет, так нет
источник

DS

David Sorokin in pro.cxx
И это уже на грани перехода на личности
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
И это уже на грани перехода на личности
Вовсе нет, просто ошибка находится уже где-то в общей логике происходящего. Что вообще может означать требование на возвращаемое значение функции, которое указано точно.
источник

CD

Constantine Drozdov in pro.cxx
ConvertibleToBool int foo()
источник

CD

Constantine Drozdov in pro.cxx
что еще хуже - для шаблона функции возвращаемое значение является частью сигнатуры, так что
template <typename T> auto foo() {}
template <typename T> decltype(auto) foo() {}

перед нами уже разные шаблоны функции, и
template <typename T> ConvertibleToBool auto foo() {}

было бы еще одним разным шаблоном функции
источник

CD

Constantine Drozdov in pro.cxx
David Sorokin
Не надо сочинять! Это вполне ожидаемая вещь. Но нет, так нет
Так что это не "ожидаемая вещь", это прямо-таки "а язык-то хотя бы от этого полностью не сломается?" вещь
источник

D

Danya in pro.cxx
David Sorokin
Спасибо! Мне уже выше написали, что нужно пересмотреть саму идею, что лучше ограничивать входные параметры, а не выход функции. Соглашусь с вами, хотя для целей само-документирования кода было бы здорово и ограничить выход. Хотел что-то такое замутить с автоматическим placeholder, но выражение типа "template<typename MapItem, typename MapFn> Activity<MapItem> auto map(MapFn&&)" проставляет совсем не тот MapItem. Он почему-то получается дважды вложенным в Activity, а так было бы красиво. Тут я совсем не понимаю, как работают placeholder и связка концепта с auto. Видео посмотрю
Такое ограничение все ещё можно написать
И можно было бы его оставить в тестах
источник

D

Danya in pro.cxx
Потому что это требование к разработчику приложения, чем к его пользователю
источник