|
0 / 0 / 0
Регистрация: 28.02.2023
Сообщений: 26
|
|||||||||||
Оболочка для возвращаемого значения функции и std::optional03.03.2023, 14:02. Показов 2555. Ответов 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
Тип возвращаемого значения функции Вывод возвращаемого значения функции
Структура в качестве возвращаемого значения функции Ошибка с приведением возвращаемого из функции значения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|