|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|||||||||||
Оболочка для возвращаемого значения функции и std::optional03.03.2023, 14:02. Показов 2447. Ответов 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
Тип возвращаемого значения функции Вывод возвращаемого значения функции
Структура в качестве возвращаемого значения функции Ошибка с приведением возвращаемого из функции значения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|