|
|
||||||
Доступ по указателю только для чтения20.09.2021, 22:38. Показов 3553. Ответов 39
Метки нет (Все метки)
Мое почтение, джентльмены.
Возможно ли сделать доступ по указателю к структуре в классе - только для чтения? Сама структура может меняться внутри класса. Но для внешнего кода - Const. Пример:
0
|
||||||
| 20.09.2021, 22:38 | |
|
Ответы с готовыми решениями:
39
Передача двумерного массива по указателю для чтения Доступ только для чтения Доступ только для чтения исправление |
|
|
||||||
| 23.09.2021, 20:14 [ТС] | ||||||
|
Cпасибо, понятно.
Здесь вызывается конструктор без скобок, какой из вариантов конструктора используется? Если их несколько? Как с пустыми скобками?
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 23.09.2021, 21:05 | |
|
bedvit, в данном случае эти две записи приводят к одному и тому же. Они эквивалентны.
Вызывается определенный вами конструктор без параметров.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 23.09.2021, 22:30 | |
|
bedvit, в смысле навесить const нижнего уровня к алиасу?
0
|
|
|
|
|
| 23.09.2021, 22:47 [ТС] | |
|
DrOffset, идея в чем. Долго баловался с C API Excel в его родной сишной реализацией, разные функции вспомогательные написал. Потом ручное управление памятью стало стимулируещим фактором что-то сделать годное. Сделал оболочку-класс XlopX с голым указателем LPXLOPER12 наружу. Во все функции заходил (класс), сам управлял памятью, что-то вроде умного указателя. Сейчас решил все функции зашить в методы класса, напилить нормальный класс с Инкапсуляцией и всем остальным по феншую. Указатель LPXLOPER12 решил оставить (C API функции его кушают и иногда надо его скормить), но данные в классе менять уже не нужно. Думаю как правильно сделать.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 23.09.2021, 23:15 | |
|
Вроде Алексей дал нормальный совет, метод возвращающий указатель на константный объект.
Вроде проще уже никуда.
0
|
|
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,316
|
|
| 24.09.2021, 06:02 | |
|
SmallEvil, я вот тоже не понимаю, зачем такую непотребщину юзать
LPXLOPER12, есть же исходный тип XLOPER12, всегда можно пририсовать звезду и не запутаться XLOPER12*. Это информативнее и, как выяснилось, менее грабленаступательно
0
|
|
|
|
||||||
| 24.09.2021, 08:21 [ТС] | ||||||
|
Хорошо, предположим условный код был такой
Excel12 функция EXCEL С API
0
|
||||||
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,316
|
|
| 24.09.2021, 09:47 | |
|
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 24.09.2021, 12:52 | |||
|
Т.е. в идеале у вас не должно быть голых сишных интерфейсов вообще. Доступ к ним можно оставить, но только через специальные функции с длинными говорящими именами, с пометкой в документации, что пользоваться ими стоит только в крайнем случае. Все штатные варианты использования сишных функций и типов нужно инкапсулировать. Естественно заставлять пользователей выписывать эти константы тоже неприемлемо. Нужно сделать набор функций (это либо свободные функции для обертки над XLOPER12, либо методы этой обертки), которые будут включать в себя все эти низкоуровневые контракты, задавать нужные константы и трасформировать сишные обобщения в конкретные типы по смыслу.И вот если сделать это комплексно, то никакие операторы приведения будут не нужны, а константность можно контролировать естественным образом.
2
|
|||
|
|
|
| 24.09.2021, 15:46 [ТС] | |
|
Алексей1153, out это указатель. Посмотрите внимательнее. Я хотел, что бы вы в этот пример подставили свое решение.
DrOffset, все в класс и уберу, никаких магических чисел не будет, я писал пример по памяти, и поставил условное число, для каждой функции есть определенное имя. Голые интерфейсы хотел убрать в чтение (в const?). За этим и тема, как убрать красиво.
0
|
|
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,316
|
||||||||||||||||||
| 24.09.2021, 15:58 | ||||||||||||||||||
|
Добавлено через 2 минуты аа, всё, понял, про что ) Добавлено через 4 минуты собственно, если бы поле было паблик, то
XLOPER12* GetConstPointer()const{return ptr;}, то
1
|
||||||||||||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||||||||||
| 24.09.2021, 23:05 | ||||||||||||
|
Не претендуя на полноту и абсолютную истину предложу вариант для старта: Кликните здесь для просмотра всего текста
Это, может быть, так сказать, первый уровень абстракции. На втором уровне предстоит определить конкретные функции, с конкретными типами уже без привязки к xloper вовсе.
1
|
||||||||||||
|
|
|
| 27.09.2021, 08:49 [ТС] | |
|
DrOffset, спасибо за реализацию и достаточно глубокое погружение в тему. Если ваш код в дальнейшем будет использоваться вами, или есть интерес к даннной теме, то здесь я могу отметить несколько моментов и нюансов.
При обсуждении здесь я понял концепцию, как я хочу видеть данный класс. Благодарю участвовавших.
0
|
|
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,316
|
||
| 30.09.2021, 23:05 | ||
|
--del--
Добавлено через 1 минуту сорри, понял ) Добавлено через 2 минуты
0
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 30.09.2021, 23:26 | |||
|
1) Плохой дизайн; 2) Как следствие - нарушение инкапсуляции; 3) Все дальнейшие проблемы - это следствие первых двух. Добавлено через 4 минуты Если нет, то формально ничего страшного не произойдет. Мы навесили конст внутри класса, а потом сняли его явно кастом снаружи. Можно присваивать, но это все еще кривой код, оправдание которому нужно было бы долго и нудно предъявлять на ревью (если бы оно имело место).
0
|
|||
|
|
|
| 01.10.2021, 08:38 [ТС] | |
|
1. Так делать плохо, но кто мешает плохому кодеру так сделать? Вернее даже не плохо, а нужно думать зачем ты так сделал. А как с инкапсуляцией у std::string::c_str(), это тоже константный указатель на сишную строку. Аналогичная ситуация?
2. Из замеченного копмилятор VS 2017 присваивает значение xltype в l, но значения в х остаётся прежним. Будет все таки присвоено значение в х или нет?) И плохому кодеру этот лайфхак не поможет?
0
|
|
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,316
|
|
| 01.10.2021, 09:45 | |
|
bedvit,
1) - никто не мешает сделать, если только потом не хочется бегать и выяснять, где и что загадочно не работает. У std::string "память" редактируемая, не константная. Метод c_str() возвращает указатель на константу, но рядом же есть метод data(), позволяющий править значения в строке напрямую. То есть, такое вмешательство официально разрешено разработчиками класса
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||
| 01.10.2021, 10:32 | |||||
|
0
|
|||||
| 01.10.2021, 10:32 | |
|
Ошибка - доступ только для чтения. ( Color ) Доступ НЕ только для чтения к документу из журнала
Невозможно присвоить значение свойству или индексатору - доступ только для чтения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|