2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||
1 | ||||||
Switch по указателю10.07.2017, 13:38. Показов 1985. Ответов 15
Метки нет Все метки)
(
Есть функция которая может вернуть указатель на результат в случае успеха, вернуть nullptr в случае провала, а может выдать критический сбой. Да, я в курсе что для обработки критического сбоя есть исключения или errno. Но мне тут вдруг подумалось что вместо установки errno, можно вернуть указатель на errorObject. Вопрос - можно ли как-то реализовать switch по результату такой функции?
0
|
10.07.2017, 13:38 | |
10.07.2017, 13:38 | |
Ответы с готовыми решениями:
15
Switch . Как присвоить переменной значение из Switch в default
|
What a waste!
![]() 1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
10.07.2017, 16:32 | 2 |
Renji, не думаю, что такое возможно. В switch-case нужно константное выражение, а тут адрес переменной.
Если сделать указатель constexpr, то тогда непонятно, на что он должен указывать и как различить его с корректным результатом.
0
|
Заблокирован
|
|
10.07.2017, 16:40 | 3 |
Адрес глобальной (выражаясь простым языком) переменной! Вполне себе константное выражение. Можно в нетиповые параметры темплейтов подставлять.
1
|
What a waste!
![]() 1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||||||
10.07.2017, 17:14 | 4 | |||||
Renji, хотя может как-нибудь так:
Добавлено через 2 минуты Да, может быть и так. Добавлено через 30 минут Хотя нет, так или иначе выражение константное, и reinterpet_cast там неполучится использовать.
1
|
Заблокирован
|
|
10.07.2017, 17:17 | 5 |
1
|
What a waste!
![]() 1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
10.07.2017, 19:17 | 6 |
Renji, вообще, сама идея выглядит как жуткий костыль, почему бы не использовать std::pair<T *, bool> или optional<T *>, например?
0
|
Вездепух
![]() ![]() ![]() 12821 / 6692 / 1801
Регистрация: 18.10.2014
Сообщений: 16,966
|
|
10.07.2017, 20:40 | 7 |
Да, но все равно адрес глобальной переменной, приведенный к целочисленному типу, не порождает целочисленного константного выражения.
На самом деле константность адреса глобальной переменной - константность чисто концептуальная. Он на самом деле физически совсем не константен и чтобы изобразить его "константность" компилятору приходится предпринимать недюжинные усилия. Но вот сделать еще и результат приведения к целочисленному типу целочисленным константным выражением - это уже за гранью возможного.
1
|
Заблокирован
|
|
10.07.2017, 20:46 | 8 |
А обратное я и не собираюсь утверждать.
Я знаю, что обычно линкер подставляет адреса.
0
|
Вездепух
![]() ![]() ![]() 12821 / 6692 / 1801
Регистрация: 18.10.2014
Сообщений: 16,966
|
|
10.07.2017, 20:48 | 9 |
Более того, в случае использования shared objects эти адреса могут стать известными только на стадии загрузки. Спецификация языка была заранее подогнана под то, что умеет делать загрузчик, а что не умеет.
0
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
10.07.2017, 21:09 [ТС] | 10 |
И вместе if(res==&errorObject), будет if(!res.second). Как по мне, так читаемость только упала. А еще ведь исполняемый код для возврата структуры будет однозначно сложнее.
Собственно, если тащить отдельный флаг ошибок, то есть сишное глобальное errno специально для передачи кодов ошибок и придуманное. Мне же было интересно и код ошибки вернуть, и отдельную переменную под это не тратить.
0
|
What a waste!
![]() 1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||||||
10.07.2017, 21:19 | 11 | |||||
Ну без отдельной переменной вряд ли получится. А по поводу читаемости с optional, теоретически, получше, например:
0
|
Заблокирован
|
|
10.07.2017, 21:21 | 12 |
Может просто
if (res) ? А то тут такое есть:![]()
0
|
What a waste!
![]() 1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
10.07.2017, 21:29 | 13 |
0
|
Заблокирован
|
|
10.07.2017, 21:31 | 14 |
gray_fox, а зачем тут вообще optional тогда, если отсутствие значения кодируется нулевым указателем? optional имеет смысл использовать когда он сам может не содержать значения.
0
|
What a waste!
![]() 1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
10.07.2017, 21:32 | 15 |
0
|
Заблокирован
|
|
10.07.2017, 21:34 | 16 |
gray_fox, прозевал, что optional проверяется до разыменования. В общем, never mind.
0
|
10.07.2017, 21:34 | |
10.07.2017, 21:34 | |
Помогаю со студенческими работами здесь
16
Подключить switch к другому switch Power Switch и Reset Switch Изменить cell.accessorytype тип на тип Switch (с кнопкой Switch) Поместить switch в switch Оптимальная конструкция switch-case-while / while-switch-case Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Ошибка "Cleartext HTTP traffic not permitted" в Android
hw_wired 13.02.2025
При разработке Android-приложений можно столнуться с неприятной ошибкой "Cleartext HTTP traffic not permitted", которая может серьезно затруднить отладку и тестирование. Эта проблема особенно. . .
|
Изменение версии по умолчанию в NVM
hw_wired 13.02.2025
Node Version Manager, или коротко NVM - незаменимый инструмент для разработчиков, использующих Node. js. Многие сталкивались с ситуацией, когда разные проекты требуют различных версий Node. js,. . .
|
Переименование коммита в Git (локального и удаленного)
hw_wired 13.02.2025
Git как система контроля версий предоставляет разработчикам множество средств для управления этой историей, и одним из таких важных средств является возможность изменения сообщений коммитов. Но зачем. . .
|
Отличия Promise и Observable в Angular
hw_wired 13.02.2025
В веб-разработки асинхронные операции стали неотъемлимой частью почти каждого приложения. Ведь согласитесь, было бы странно, если бы при каждом запросе к серверу или при обработке больших объемов. . .
|
Сравнение NPM, Gulp, Webpack, Bower, Grunt и Browserify
hw_wired 13.02.2025
В современной веб-разработке существует множество средств сборки и управления зависимостями проектов, каждое из которых решает определенные задачи и имеет свои особенности. Когда я начинаю новый. . .
|
Отличия AddTransient, AddScoped и AddSingleton в ASP.Net Core DI
hw_wired 13.02.2025
В современной разработке веб-приложений на платформе ASP. NET Core правильное управление зависимостями играет ключевую роль в создании надежного и производительного кода. Фреймворк предоставляет три. . .
|
Отличия между venv, pyenv, pyvenv, virtualenv, pipenv, conda, virtualenvwrapper, poetry и другими в Python
hw_wired 13.02.2025
В Python существует множество средств для управления зависимостями и виртуальными окружениями, что порой вызывает замешательство даже у опытных разработчиков. Каждый инструмент создавался для решения. . .
|
Навигация с помощью React Router
hw_wired 13.02.2025
React Router - это наиболее распространенное средство для создания навигации в React-приложениях, без которого сложно представить современную веб-разработку. Когда мы разрабатываем сложное. . .
|
Ошибка "error:0308010C:digital envelope routines::unsupported"
hw_wired 13.02.2025
Если вы сталкиваетесь с ошибкой "error:0308010C:digital envelope routines::unsupported" при разработке Node. js приложений, то наверняка уже успели поломать голову над её решением. Эта коварная ошибка. . .
|
Подключение к контейнеру Docker и работа с его содержимым
hw_wired 13.02.2025
В мире современной разработки контейнеры Docker изменили подход к созданию, развертыванию и масштабированию приложений. Эта технология позволяет упаковать приложение со всеми его зависимостями в. . .
|