|
|
||||||
Доступ по указателю только для чтения20.09.2021, 22:38. Показов 3543. Ответов 39
Метки нет (Все метки)
Мое почтение, джентльмены.
Возможно ли сделать доступ по указателю к структуре в классе - только для чтения? Сама структура может меняться внутри класса. Но для внешнего кода - Const. Пример:
0
|
||||||
| 20.09.2021, 22:38 | |
|
Ответы с готовыми решениями:
39
Передача двумерного массива по указателю для чтения Доступ только для чтения Доступ только для чтения исправление |
|
|
||||||
| 23.09.2021, 20:14 [ТС] | ||||||
|
Cпасибо, понятно.
Здесь вызывается конструктор без скобок, какой из вариантов конструктора используется? Если их несколько? Как с пустыми скобками?
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 23.09.2021, 21:05 | |
|
bedvit, в данном случае эти две записи приводят к одному и тому же. Они эквивалентны.
Вызывается определенный вами конструктор без параметров.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 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
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 24.09.2021, 06:02 | |
|
SmallEvil, я вот тоже не понимаю, зачем такую непотребщину юзать
LPXLOPER12, есть же исходный тип XLOPER12, всегда можно пририсовать звезду и не запутаться XLOPER12*. Это информативнее и, как выяснилось, менее грабленаступательно
0
|
|
|
|
||||||
| 24.09.2021, 08:21 [ТС] | ||||||
|
Хорошо, предположим условный код был такой
Excel12 функция EXCEL С API
0
|
||||||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 24.09.2021, 09:47 | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 24.09.2021, 12:52 | |||
|
Т.е. в идеале у вас не должно быть голых сишных интерфейсов вообще. Доступ к ним можно оставить, но только через специальные функции с длинными говорящими именами, с пометкой в документации, что пользоваться ими стоит только в крайнем случае. Все штатные варианты использования сишных функций и типов нужно инкапсулировать. Естественно заставлять пользователей выписывать эти константы тоже неприемлемо. Нужно сделать набор функций (это либо свободные функции для обертки над XLOPER12, либо методы этой обертки), которые будут включать в себя все эти низкоуровневые контракты, задавать нужные константы и трасформировать сишные обобщения в конкретные типы по смыслу.И вот если сделать это комплексно, то никакие операторы приведения будут не нужны, а константность можно контролировать естественным образом.
2
|
|||
|
|
|
| 24.09.2021, 15:46 [ТС] | |
|
Алексей1153, out это указатель. Посмотрите внимательнее. Я хотел, что бы вы в этот пример подставили свое решение.
DrOffset, все в класс и уберу, никаких магических чисел не будет, я писал пример по памяти, и поставил условное число, для каждой функции есть определенное имя. Голые интерфейсы хотел убрать в чтение (в const?). За этим и тема, как убрать красиво.
0
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
||||||||||||||||||
| 24.09.2021, 15:58 | ||||||||||||||||||
|
Добавлено через 2 минуты аа, всё, понял, про что ) Добавлено через 4 минуты собственно, если бы поле было паблик, то
XLOPER12* GetConstPointer()const{return ptr;}, то
1
|
||||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||
| 24.09.2021, 23:05 | ||||||||||||
|
Не претендуя на полноту и абсолютную истину предложу вариант для старта: Кликните здесь для просмотра всего текста
Это, может быть, так сказать, первый уровень абстракции. На втором уровне предстоит определить конкретные функции, с конкретными типами уже без привязки к xloper вовсе.
1
|
||||||||||||
|
|
|
| 27.09.2021, 08:49 [ТС] | |
|
DrOffset, спасибо за реализацию и достаточно глубокое погружение в тему. Если ваш код в дальнейшем будет использоваться вами, или есть интерес к даннной теме, то здесь я могу отметить несколько моментов и нюансов.
При обсуждении здесь я понял концепцию, как я хочу видеть данный класс. Благодарю участвовавших.
0
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
||
| 30.09.2021, 23:05 | ||
|
--del--
Добавлено через 1 минуту сорри, понял ) Добавлено через 2 минуты
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 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
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,289
|
|
| 01.10.2021, 09:45 | |
|
bedvit,
1) - никто не мешает сделать, если только потом не хочется бегать и выяснять, где и что загадочно не работает. У std::string "память" редактируемая, не константная. Метод c_str() возвращает указатель на константу, но рядом же есть метод data(), позволяющий править значения в строке напрямую. То есть, такое вмешательство официально разрешено разработчиками класса
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 01.10.2021, 10:32 | |||||
|
0
|
|||||
| 01.10.2021, 10:32 | |
|
Ошибка - доступ только для чтения. ( Color ) Доступ НЕ только для чтения к документу из журнала
Невозможно присвоить значение свойству или индексатору - доступ только для чтения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|