|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|||||||||||
Оболочка для возвращаемого значения функции и std::optional03.03.2023, 14:02. Показов 2532. Ответов 20
Добрый день!
Есть вот такой код: Кликните здесь для просмотра всего текста
Нужно сделать оболочку для возвращаемого значения функции, даже если оно void. Также нужно уведомить пользователя о том, что было исключение, для этого используется std::option. Пока что так: Кликните здесь для просмотра всего текста
0
|
|||||||||||
| 03.03.2023, 14:02 | |
|
Ответы с готовыми решениями:
20
Ключевое слово const для возвращаемого значения из функции Самый простой PHP код для вызова хранимой функции PostgreSQL и вывода возвращаемого значения? std::optional<T> при std::is_destructible_v<T> == false |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 03.03.2023, 17:49 | |||||||
Сообщение было отмечено NanoCase как решение
Решение
1
|
|||||||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
| 03.03.2023, 22:02 [ТС] | ||||||
|
Хорошее решение. Но в языке следующий код является валидным:
Кликните здесь для просмотра всего текста
Думаю что можно как-то сыграть от этого при помощи SFINAE и приведений типов.
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 03.03.2023, 22:37 | ||
if constexpr, либо то же самое, только через специализацию какого-нибудь "инвокера".
1
|
||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|
| 03.03.2023, 22:52 [ТС] | |
|
Понял. Спасибо за ответ!
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 08.03.2023, 21:51 | |||||||
Сообщение было отмечено zayats80888 как решение
РешениеВот без специализаций и условий.
2
|
|||||||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|
| 09.03.2023, 23:54 [ТС] | |
|
DrOffset, т.е. перегружая оператор запятая у нас появляется возможность вывести возвращаемое значение функции в виде шаблона и если на 7 строчке провал подстановки то мы инициализируем Ret пустышкой?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 10.03.2023, 00:52 | ||
|
И на 19 строчке в конструктор optional нужно передать объект Dummy, иначе результат неотличим от того, что в строке 22.
2
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 10.03.2023, 06:53 | ||
1
|
||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
| 11.03.2023, 22:14 [ТС] | ||||||
|
zayats80888 DrOffset, продолжаю улучшать оболочку, хочу чтобы функцию можно было вызывать из объекта, т.е. сохраняем в классе указатель на вызывающую сторону, когда хотим вызвать проверяем указатель на nullptr и вызываем соответствующий вариант функции. Но такой подход походу не работает, компилятор выдает ошибку. Можете направить меня в нужную сторону, пожалуйста
Кликните здесь для просмотра всего текста
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 11.03.2023, 22:16 | |
|
NanoCase, у вас же есть std::function, нет нужды вводить разграничение на уровне вызова, когда можно его спрятать на уровне создания функтора.
1
|
|
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|
| 11.03.2023, 22:32 [ТС] | |
|
DrOffset, в std::function можно указывать вызывающую сторону?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 11.03.2023, 22:38 | |||||||
|
Вот вариант:
1
|
|||||||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
| 12.03.2023, 00:44 [ТС] | ||||||
|
DrOffset, Вроде разобрался. Спасибо!
Добавлено через 1 час 25 минут DrOffset, проблемка вылезла, std::bind нужны placeholders на все аргументы вызываемой функции, вроде как решается заменой bind на аналогичную лямбду, с захватом функции и caller. Вот решение близкое к правде, но он ругается на сам вызов функции в лямбде Кликните здесь для просмотра всего текста
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||
| 12.03.2023, 00:55 | ||||||
|
NanoCase, синтаксис вызова через указатель на метод другой. Плюс забыли forward
1
|
||||||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|
| 12.03.2023, 02:46 [ТС] | |
|
DrOffset, Заработало, спасибо
![]() Добавлено через 1 час 8 минут DrOffset, у меня ещё вопрос созрел(возможно глупый). Допустим я хочу передать в качестве параметра функции shared_ptr, который должен скопироваться в оператор() и следовательно в пользовательскую функцию. Можно ли это решить без перегрузок оператора() и тотального переписывания кода?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 12.03.2023, 12:40 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
||||||
| 12.03.2023, 13:49 [ТС] | ||||||
|
DrOffset, gcc 12.2 ошибку выдает на ваш код:
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||
| 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
Тип возвращаемого значения функции Вывод возвращаемого значения функции
Структура в качестве возвращаемого значения функции Ошибка с приведением возвращаемого из функции значения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|