170 похожих чатов

А именно, допустим есть некоторый тип «Activity<Item, Impl = …>»

с автоматическим преобразованием в «Activity<Item>», то есть, когда Impl становится неким стандартным. Теперь я хочу создать концепт «template<typename From, To> concept ActivityLike = std::convertible_to<From, Activity<To>>». Далее, есть куча функций вида «template<typename MapItem, typename MapFn> auto map(MapFn&&)», где автоматически выводится тип результата. Там получается что-то типа «Activiity<MapItem, SomeComplexImpl>». Вот, и я хочу в сигнатуре функции явно сказать, что некий выводимый тип результата Res удовлетворяет концепту «ActivityLike<Res, MapItem>». Все было бы просто, если бы в коде можно было бы явно ссылаться на тип Res, но он выводится, и там стоит «auto». Если попытаться ввести Res явно, то ломается выводилка типов у GCC. Может, у кого есть идеи? Или просто укажите хорошее введение по концептам с погружением. Все утро перед работой голову ломал. Если что, это хобби в свободное время. Коллег так мучать не стал бы)

4 ответов

29 просмотров

У bfilipek в его блоге, вроде бы, было.. Хотя там я линк видел на этот блог, тут автор рассматривает, как можно коньцепт: https://mariusbancila.ro/blog/2019/09/12/cpp20-concepts-in-visual-studio-2019-16-3-preview-2/

Концепты обычно применяют для того чтобы ограничить входные параметры. Результат функции описывать концептом звучит немного странно, но я не очень хорошо знаком с ними. Кажется этого можно добиться если явно определить тип результата. Что-нибудь такого плана: template<typename MapItem, typename MapFn, typename Result = ...> Result map(MapFn&&) requires ActivityLike<Result> { ... }

Как уже было сказано, обычно концепты используют для входных параметров Единственным, как мне кажется, решением тут может быть кучка static_assert'ов, на вызов функции при разных шаблонных параметрах

UPD: кажется, я был не прав Сейчас открыл Release notes для CLion 2020.2 — можно констрейнить возвращаемое значение https://blog.jetbrains.com/clion/2020/07/clion-2020-2-makefile-cpp20-doctest/

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта