Я хотел бы использовать шаблон проектирования Composite в C ++, чтобы иметь возможность создавать группы объектов и работать с ними. Проблема, с которой я столкнулся, состоит в том, что, поскольку листья и композиты обрабатываются одинаково, а композиты могут состоять из листьев и композитов, вполне возможно, что объект может работать более одного раза, когда команда передается в композит.
Например, составная группа1 содержит объекты A и B. Затем создается составная группа2, содержащая составную группу1 и объект A. При работе с составной группой2 объект A будет работать дважды. Я полагаю, что для некоторых приложений это не проблема, но для моего использования я бы хотел, чтобы для любой команды, выданной составному, уникальные объекты обрабатывались только один раз.
Существует ли идиоматический способ решения этой проблемы: как предотвратить множественные вызовы функции-члена объекта или предотвратить включение объекта в состав более одного раза?
-
Обновление:
Под «идиоматическим» я подразумеваю «традиционный» или «принятый» способ решения этого типа проблемы.
Я предполагаю, что просто предполагаю / надеюсь, что это распространенная проблема, которая имеет устоявшееся решение.