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 ответов

13 просмотров

У 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/

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта