Член указатель09.07.2024, 23:01. Показов 3934. Ответов 52
Метки нет (Все метки)
Добрый день
Очень простая конструкция
Как лучше? Слышал такое 1) "Лучше иметь m_data членом, а не указателем". Это владение, а оно не всегда нужно/допустимо. В большинстве случаев SomeObject просто использует SomeData для чтения/записи, но SomeData остается вполне самостоятельным объектом что может существовать и без SomeObject 2) "Необходимо использовать вумный указатель! Вообще "голые" указатели (как в примере выше) - это зло, их быть вообще не должно!" А Вы что предложите? Спасибо
0
|
||||||
| 09.07.2024, 23:01 | |
|
Ответы с готовыми решениями:
52
Функция-член принимает указатель на функцию-член
Указатель на функцию-член |
| 15.07.2024, 21:52 [ТС] | ||
|
Но вопрос не только (и не столько) в этом. Ожидается что undo удаления восстановит указатель на SomeData. А вот для этого никаких решений предложено не было. Если я что-то упустил - плиз "ткните носиком", а иначе не надо "говорить неправду" (это мягко )
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||||
| 15.07.2024, 22:14 | ||||||||
|
Это относится к "не только". Что не устраивает?
0
|
||||||||
| 16.07.2024, 03:08 [ТС] | |||||||
Не по теме: Да, и про форматирование диска так и не понял. Наверно Вы острите, но в чем прикол не знаю
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||||
| 16.07.2024, 19:58 | ||||||||
|
Кликните здесь для просмотра всего текста
Этой теме самое место в разделе "обо всем" (и ниочем).
0
|
||||||||
| 18.07.2024, 00:10 [ТС] | ||||||||||||
|
Немного повторюсь чтобы можно было читать тему отсюда. Некто SomeObject ссылается на др объект SomeData. Я предлагаю самое простое решение: пусть не только SomeObject "знает" SomeData, но и наоборот, SomeData знает всех SomeObject что ссылаются на него. Тогда легко отрабатываются все случаи когда "надо знать кто ссылается на данный SomeData"
zayats80888 со мной не согласен и считает добавление/хранение m_clients плохим и неграмотным. И утверждает что вместо этого правильно использовать слот/сигнал, приводя псевдокод (хорошо написаный) 1) Плохо с общностью. Всякий раз когда надо знать "ссылающихся" приходится прыгать в слот где они известны. Вот напр юзер хочет знать какие SomeObject используют данный SomeData (покажите всех slaves данного master'а) . И опять приходится заводить/коннектить сигнал. Может лучше сделать так
2) Не вижу как "расширять". Мой вариант расширяется легко, если надо - покажу, сейчас не хочу перегружать пост. А со слот/сигнал - не вижу
0
|
||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||
| 18.07.2024, 21:39 | |||||
|
А если юзер захочет форматировать диск(вы помните, что нужно сделать)? Ссылки, что я вам дал, вы видимо поленились прочитать. Тогда повторюсь, для продуктивного обсуждения вы должны указать конечную цель и максимально подробный список сопутствующих хотелок. Вы же тут разводите типичную проблему XY. И ладно бы вы были зеленым новичком, но нет, вы не новичок и не глупы, поэтому я справедливо делаю вывод, что вы намеренно троллите пользователей форума. Если не хотите нормально сформулировать вопрос, то это сделаю я на основе всего вами написанного в этой теме(на самом деле для себя я это давно сделал, и все мои посты нужно рассматривать только в этом контекте): цель - нужно в условном графическом редакторе реализовать возможность одновременного редактирования свойств нескольких объектов, хотелки - нужно сохранить поддержку undo/redo; нужно сохранять группу редактирования не только на время редактирования и иметь возможность исключать/добавлять новые объекты в группу(в том числе и опосредованно через уничтожение объекта); тип объектов не имеет значения, важно только наличие общих свойств (это моя хотелка). Лучшее, на мой субъективный взгляд, решение я уже озвучивал:
0
|
|||||
| 19.07.2024, 23:48 [ТС] | |||
|
Не по теме: Кстати, отличная ссылка (проблема XY), раньше не видел. С хотелками тоже не все так просто. Да, кое-что очевидно: кроме просто валидности, возникают ситуации когда надо "знать всех кто ссылается на данный объект" (SomeData стартового поста). Таких ситуаций не так уж много, хорошо помню с undo, часто нужно просто "предъявить ссылающихся" (напр выбрать эти объекты в UI), но "огласить весь список" - ну не хочу я пыль глотать лазая по коду день за днем. А вот дальше с хотелками - неясно. Вам нравится собсно "член-указатель" стартового поста? Мне нет, ну как-то выглядит он хреновенько. Не ошибка, но и гордиться нечем. Чуть лучше BaseClass (вместо SomeObject и SomeData), но тоже не блеск (god-class и все такое). Было бы таких пара-тройка - ну и ладно. Но если их уже десятки - значит обобщения/расширения актуальны. Для каждого указателя надо проводить/обеспечивать undo, сериализацию и др. При этом хотя зависимости самые разные и используются в самых разных классах - нет никакой "связи" ни с каким из этих классов. Членство (именно) указателей совсем необязательно, для ф-ционала нужно этот указатель получить - и все. Др словами это может быть чем-то другим, напр умным указателем, id, просто ф-цией и.т.п. И мы приходим к классической задаче
0
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||
| 20.07.2024, 02:06 | ||
|
SomeData - это тип-значение (как целое число или цвет). В С++ это структура с открытыми полями. Этот тип не должен знать, каким образом редактируют SomeObject. При необходимости можно добавить несколько конструкторов и статических методов. SomeObject - это тип-объект. Если нужно редактировать какое-то свойство пачками, то создайте тип SomeDataGroup "Группа редактирования". Группа может хранить список объектов, которые её используют. SomeObject кроме свойства SomeData может иметь свойство SomeDataGroup. Если оно заполнено в SomeObject, то SomeData будет браться из него. Это приблизительно. При реализации могут всплыть дополнительные нюансы.
0
|
||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
||
| 20.07.2024, 16:53 | ||
|
у тебя здесь не стоит выбор засунуть в структурку сами данные или ссылку на них. если тебе нужна ссылка - и так и так будет ссылка, иначе подобное смысла не имеет. вот и смотри, будет ли эта структурка являться частью чего-то большего, либо она(на уровне типов) автономна.
0
|
||
| 21.07.2024, 21:43 [ТС] | ||||
|
ReferenceHandler // тот кто ссылается, клиент (SomeObject) ReferenceTarget // на кого ссылаются (SomeData) При этом ReferenceTarget - совсем не какие-то простые данные что решаются владением. Обычно Handler и Target - оба объекты сцены, т.е. примерно "равноправны", выше пример где это даже один тип (light master/slave) Интересные "коллизии" возникают при дублировании/клонировании объектов со ссылками. На примере master/slave вроде все ясно - копия slave тоже slave (того же мастера), а копия мастера нет, на нее никто не ссылается. Но если клонируются оба (master и slave), то рез-т ожидается другой. Как и для других конкретных использований. Ну и это я скромно/серенько назвал тему "про указатели", а при желании можно написать много громких слов типа "как организовать ссылки объектов" и все такое. Да, и все-таки интересно, а как с этим в др языках где указателей нет?
0
|
||||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||||
| 21.07.2024, 22:02 | ||||
|
0
|
||||
| 22.07.2024, 16:56 [ТС] | |||||||
|
Стандартные средства, напр weak_ptr или QPointer обеспечивают лишь валидность, при этом навязывая shared_ptr или QObject. Знать какие объекты ссылаются на данный - такого не знаю. Почему бы не реализовать такое самому? Напр (псевдокод)
![]() Добавлено через 2 часа 1 минуту Да, и опять чуть не забыл. А где все эти распрекрасные книги и их знатоки? На мой взгляд, вопрос чисто общий, ни с какой предметной частью не связан. Вот этим знатокам и карты в руки, ожидается хотя бы "тыц" типа "читайте такую-то работу".
0
|
|||||||
| 30.07.2024, 02:03 [ТС] | |||||||
|
Апну (хорошую) тему. Пожуем как "член-указатель" реализован изначально, писалось (не мной) еще в 90-е (если не раньше) и, видимо, вначале на паскале.
Решение такое: всякий раз когда нужно что-то сделать для "ссылающихся" (SomeObject), мы пробегаемся по всем объектам, фильтруя и выполняя нужные действия для них. Псевдокод
Несмотря на всю "примитивность" такого подхода, докопаться/покритиковать его непросто. Контейнер "всех объектов" (globalScene.objects) есть, даже если его бы не было - создать несложно. Он слишком велик и может тормозить - ну вряд ли. Пожалуй единственный минус что я заметил - вживлять такой перебор приходится в нескольких местах, никак не связанных между собой. Если эти места знать/помнить - новый "член-указатель" успешно добавляется за 5 минут.
В самом деле, мы, (такие умные) вооруженные пятком новых стандартов языка, слот/сигналами и еще бог весть чем - почему-то не можем улучшить конструкцию что какой-то чувак написал лет 30 назад даже без плюсов. Это как
0
|
|||||||
| 30.07.2024, 02:03 | |
|
Указатель на функцию член Указатель на функцию-член Указатель на функцию-член
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью.
Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
|
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
|
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
|