Член указатель09.07.2024, 23:01. Показов 3784. Ответов 52
Метки нет (Все метки)
Добрый день
Очень простая конструкция
Как лучше? Слышал такое 1) "Лучше иметь m_data членом, а не указателем". Это владение, а оно не всегда нужно/допустимо. В большинстве случаев SomeObject просто использует SomeData для чтения/записи, но SomeData остается вполне самостоятельным объектом что может существовать и без SomeObject 2) "Необходимо использовать вумный указатель! Вообще "голые" указатели (как в примере выше) - это зло, их быть вообще не должно!" А Вы что предложите? Спасибо
0
|
||||||
| 09.07.2024, 23:01 | |
|
Ответы с готовыми решениями:
52
Функция-член принимает указатель на функцию-член
Указатель на функцию-член |
| 13.07.2024, 19:25 [ТС] | |||||
Удаляется элемент/объект сцены, обеспечить undo обязан. Да, факт/действие установки ссылки конечно был, но
0
|
|||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||
| 13.07.2024, 19:48 | ||||
|
Я вижу только две причины - комплексное редактирование и снижение зтарат памяти (например, снижение траффика данных на gpu). Ответьте на пару вопросов: 1) кто владеет "параметрами"? (очевидно владение разделяемое, т.е. подсчет ссылок актуален) 2) что происходит при редактировании "параметров" и через что они редактируются? (очевидно они меняются для всех владельцев, если нужно независимо, то редактор должен предоставлять возможность сделать ресурс уникальным, т.е. редактируется ресурс, а не владелец) 3) зачем одному объекту знать, кто и сколько еще используют тот же ресурс? (я не вижу в этом смысла, т.е. даже количество ссылок самому объекту знать не нужно) На всякий случай напомню, что undo - это отмена последнего действия, т.е. удалить Light1 через undo не затрагивая Light2 нельзя, грубо говоря, отменяться будут все действия, выполненные после создания Light1.
0
|
||||
| 13.07.2024, 22:32 [ТС] | |||
|
Если такой пример не нравится - можно другой. Хотя бы скины. Полигонный объект управляется бонами, но никакими другими отношениями/владениями они не связаны. И опять-таки нельзя просто так, безболезненно удалить бону.
0
|
|||
|
фрилансер
6482 / 5708 / 1132
Регистрация: 11.10.2019
Сообщений: 15,222
|
||
| 13.07.2024, 22:37 | ||
|
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||
| 13.07.2024, 22:40 | |||||
|
Вот я и спрашиваю, к чему вы упоминаете undo и с чем у вас там проблемы?
0
|
|||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
|
|
| 14.07.2024, 01:02 | |
|
0
|
|
| 14.07.2024, 01:36 [ТС] | |||||||||
Добавлено через 2 минуты
0
|
|||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||
| 14.07.2024, 02:31 | |||||
|
Я навскидку могу только назвать очевидные минусы: 1) с "собственными" параметрами у света композиция, а с "чужими" - агрегация, и это взаимоисключающе, т.е. либо одно, либо другое висит в объекте мертвым грузом. 2) дополнительные связи (да и еще односторонние) усложняют код, его понимание и изменение. 3) оптимизацию отправки этих данных на рендер я не вижу 4) общие параметры для, скажем, 10 источников - это односвязный список от slave к master и рекурсивный вызов GetIntensity? 5) не понятно, как организовано условное SetIntensity, slave редактирует данные master без его ведома? ("Что этот ни*ер себе позволяет?"© )Я вам сразу предложил параметры как разделяемый ресурс(Алексей1153 еще раньше) - нивелирует все вышеупомянутые минусы и снимает вопрос в заголовке темы. Добавлено через 11 минут ...
1
|
|||||
| 14.07.2024, 15:31 [ТС] | |||||||||
Хотя это и мимо темы - вместо обсуждения как сделать - обсуждается зачем (нужно ли) это делать. Но такие оффтопы всегда были и будут, иногда они полезны 1) Хотя "указатель на другой объект" используется довольно часто, но само использование уникально. Не могу припомнить ни одной такой же зависимости как "master light". Ну может "master material" как-то похож, но немного 2) Ничего я не придумывал, эта фича досталась мне по наследству. Никакого недовольства (ни моего ни юзера) она не вызывает. Да, есть мелкие проблемки, но рулить толпой лайтов актуально и удобно. 3) Детали. Там есть еще контрол
0
|
|||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||||||
| 14.07.2024, 16:50 | |||||||||||
![]() Кликните здесь для просмотра всего текста
И нет никаких master/slave, управление параметрами - это управление параметрами а не зависимостями. Короче, кроме наследия я обоснований не увидел (а плюсов вообще нет). Констатируем кривой дизайн и вытекающие из этого проблемы - лечится (если это возможно) "выпрямлением" дизайна, а не костылями. Только не понимаю, как этот ваш вопрос связан с процитированным вами. З.Ы. Ну и честно говоря, я не вижу смыла для лайтов использовать даже подход с разделяемыми ресурсами, если речь идет о том, чтоб удобно было "рулить группами" в редакторе. Лайтов как правило не много и параметры не "тяжелые" объекты (разве что текстура с проекционным изображением, но её можно и нужно в ресурсы определять). В редакторе групповое редактирование параметров удобнее сделать через паттерн "прототип" или добавить отдельную сущность группы/группового выделения. Добавлено через 20 минут Ну а если вы не намерены исправлять дизайн, то, как уже было упомянуто в этой теме, вам нужно для slave объектов организовать подписку на событие удаление master объекта из сцены, в том или ином виде (зависит от того, как у вас там вообще взаимодействие между объектами организованно). А для реализации undo/redo в обработчике такого события сериализовать команду "расцепления" каждого slave с master (идентификацию объектов при сериализации/десериализации удобно делать через глобальный id, а не через указатель, если вы не управляете менеджером памяти).
1
|
|||||||||||
| 14.07.2024, 18:07 [ТС] | |||
Это вещь на порядок(ки) более сложная чем изложена в стартовом посте. Даже вопросы типа "а как/где это юзается в проекте?" могут потребовать много дней - даже при том что я (пусть не один) много работал с проектом. Что несравнимо затратнее чем начальная задача. Нужно относиться спокойнее/лояльнее и в дебри не лезть. В данном случае.- что он (я) хочет? Знать какие объекты ссылаются на данный. Это разумный запрос/задача? Безусловно, во всяком случае не полный идиотизм. В каком-то случае можно этой задачи избежать? Может и можно, но стоит ли? Это минимум спорно. Ну и давайте эту задачу решать, не все здесь великие архитекторы ![]()
0
|
|||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||
| 14.07.2024, 18:43 | ||||
|
Я исхожу только из тредоставленной вами ограниченной информации, которую еще и клещами вытаскивать приходится. Object::aboutToBeDestroyed() - слот Light::onMasterDestroyed() это разве можно назвать "знанием о slaves"? Нет.
0
|
||||
| 14.07.2024, 20:44 [ТС] | |||
|
Меня удивляет почему не предлагается самое простое (очевидное, напрашивающееся и.т.п.) решение? Кстати недавно создавал тему "куда ставить ногу" - то же самое. Неужели никто его не видит? Не может такого быть! Или все уже заранее знают что оно плохо? (я нет). Объясните этот эффект
0
|
|||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||
| 14.07.2024, 21:14 | ||||
|
Ну добавьте еще указатель на функцию форматирования диска, "маловато" не покажется ![]() А для меня лучшее решение проблемы - не создавать проблему вообще.
0
|
||||
| 14.07.2024, 21:41 [ТС] | |||||||
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 14.07.2024, 21:54 | ||
|
Появляется новая проблема отслеживания валидности уже этих указателей. Т.е. ради всего одной сомнительной фичи "группового руления лайтами" мы параллельно одной иерархии parent/child поддерживаем еще одну кривую(почти полноценную) иерархию master/slave с непонятными взаимоотношениями. Да, это плохо и не достойно упоминания. Лучше вообще избавится от этих взаимосвязей в реализации объектов. Если нужно, делайте опосредованно (через общий ресурс) или "над" объкетами. И, кстати, вам этот вариант предлагали(не напрямую в коде, а через "подписаться на событие", ну и посмотрите типичную реализацию паттерна "наблюдатель"). И если у вас в проекте до сих пор нет механизма взаимодействия между объектами, то в обобщенном виде такую реализацию можно и прикрутить. Добавлено через 2 минуты З.Ы. Ну и что там по поводу "маловато"? Будете и дальше "скрывать" чего вам не хватает?
0
|
||
| 15.07.2024, 04:46 [ТС] | |||||||||||||||
0
|
|||||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||
| 15.07.2024, 08:52 | |||||
|
Igor3D,
Не по теме: Лишний раз убеждаюсь, что это очередная ваша тема пофлудить.
0
|
|||||
| 15.07.2024, 19:34 [ТС] | |||||||
|
Заметим что есть и др подход
Я хочу обсудить как это лучше делать/сделать, Вы напрасно называете это флудом.Да, ф-ционал "найти/иметь всех slaves" полезен, но он точно не имеет никакого отношения к классу/функционалу "источник света". Да и дублировать его для каждого из таких ситуаций (а их уже > 20) явно плохо. Кроме того, зависимостей может быть 2 и более (для одного класса). В общем, надо это куда-то "поселить", в классе Light ему точно не место
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||
| 15.07.2024, 19:54 | |||||
|
Добавлено через 5 минут З.ы. Вопрос в заголовке темы давно исчерпан. Вы же продолжаете натягивать сову на глобус, искать какой-то дополнительный функционал... Код так не пишут, стараются придерживаться парадигмы "you aren't gonna need it".
0
|
|||||
| 15.07.2024, 19:54 | |
|
Помогаю со студенческими работами здесь
40
Указатель на функцию член Указатель на функцию-член Указатель на функцию-член
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|