0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|||||||||||
Оболочка для возвращаемого значения функции и std::optional03.03.2023, 14:02. Показов 1927. Ответов 20
Добрый день!
Есть вот такой код: Кликните здесь для просмотра всего текста
Нужно сделать оболочку для возвращаемого значения функции, даже если оно void. Также нужно уведомить пользователя о том, что было исключение, для этого используется std::option. Пока что так: Кликните здесь для просмотра всего текста
0
|
03.03.2023, 14:02 | |
Ответы с готовыми решениями:
20
Ключевое слово const для возвращаемого значения из функции Самый простой PHP код для вызова хранимой функции PostgreSQL и вывода возвращаемого значения? std::optional<T> при std::is_destructible_v<T> == false |
![]() 6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
|
||||||
03.03.2023, 17:49 | ||||||
![]() Решение
Что-то в этом духе
1
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
03.03.2023, 22:02 [ТС] | ||||||
Хорошее решение. Но в языке следующий код является валидным:
Кликните здесь для просмотра всего текста
Думаю что можно как-то сыграть от этого при помощи SFINAE и приведений типов.
0
|
19413 / 10031 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
||||||
08.03.2023, 21:51 | ||||||
![]() Решение
Можно сыграть.
Вот без специализаций и условий.
2
|
![]() 6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
|
|
10.03.2023, 00:52 | |
Ага, только не на 7, а на 6 (точнее, на этапе формирования списка кандидатов в перегрузи).
И на 19 строчке в конструктор optional нужно передать объект Dummy, иначе результат неотличим от того, что в строке 22.
2
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
11.03.2023, 22:14 [ТС] | ||||||
zayats80888 DrOffset, продолжаю улучшать оболочку, хочу чтобы функцию можно было вызывать из объекта, т.е. сохраняем в классе указатель на вызывающую сторону, когда хотим вызвать проверяем указатель на nullptr и вызываем соответствующий вариант функции. Но такой подход походу не работает, компилятор выдает ошибку. Можете направить меня в нужную сторону, пожалуйста
Кликните здесь для просмотра всего текста
0
|
19413 / 10031 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
||||||
11.03.2023, 22:38 | ||||||
В std::bind или в лямбде можно.
Вот вариант:
1
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
12.03.2023, 00:44 [ТС] | ||||||
DrOffset, Вроде разобрался. Спасибо!
Добавлено через 1 час 25 минут DrOffset, проблемка вылезла, std::bind нужны placeholders на все аргументы вызываемой функции, вроде как решается заменой bind на аналогичную лямбду, с захватом функции и caller. Вот решение близкое к правде, но он ругается на сам вызов функции в лямбде Кликните здесь для просмотра всего текста
0
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|
12.03.2023, 02:46 [ТС] | |
DrOffset, Заработало, спасибо
![]() Добавлено через 1 час 8 минут DrOffset, у меня ещё вопрос созрел(возможно глупый). Допустим я хочу передать в качестве параметра функции shared_ptr, который должен скопироваться в оператор() и следовательно в пользовательскую функцию. Можно ли это решить без перегрузок оператора() и тотального переписывания кода?
0
|
19413 / 10031 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
||||||
12.03.2023, 12:40 | ||||||
А в чем проблема?
0
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
12.03.2023, 13:49 [ТС] | ||||||
DrOffset, gcc 12.2 ошибку выдает на ваш код:
0
|
19413 / 10031 / 2444
Регистрация: 30.01.2014
Сообщений: 17,697
|
||||||
12.03.2023, 14:03 | ||||||
NanoCase, так не на мой, а на ваш. Вы же сами класс изменили. У вас оператор теперь не соответствует новому подходу. Надо так:
0
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
12.03.2023, 14:14 [ТС] | ||||||
DrOffset, я думал вы не меняли описание враппера. дело в том что такая реализация будет принимать все по значению, даже если нужно чтобы оператор принял что то по ссылке. но я уже понял что перегружать по универсальной ссылке смысла мало. решил это добавлением дополнительного уровня косвенности, что то типо такого:
0
|
12.03.2023, 14:14 | |
Помогаю со студенческими работами здесь
20
Тип возвращаемого значения функции Вывод возвращаемого значения функции
Структура в качестве возвращаемого значения функции Ошибка с приведением возвращаемого из функции значения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
|
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
|
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
|
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
|
Образование и практика
Igor3D 21.03.2025
Добрый день
А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
|
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
|
Async/await в Swift: Асинхронное программирование в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
|
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
|
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Mr. Docker 20.03.2025
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную. . .
|
C++26: Индексирование пакетов и метапрограммирование
bytestream 20.03.2025
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
|