Login
[C++] Иерархия функторов
358 просмотров
Перейти к просмотру всей ветки
in Antwort Simple 20.11.06 20:20
Ну и замечательно.
Теперь подведем итог, согласно вашей постановке задачи:
1. Если "состояния конкретного элемента массива" можно передать через полиморфизм (т.е. иерархия и т.д.), а тип документа предположим только один, то вариант "Murr/voxel3d": коллекция с ссылками на базовый класс, а функтор не требует полиморфизма, так как определяет документ, который только один.
2. Если "состояния конкретного элемента массива" не требует полиморфизм (может вы имеете в виду разный state в стате-машине внутри элемента
), а разные типы документов определяются через полиморфизм, то вы можете использовать for_each и передавать функтор (определяющий документ) через ссылку.
3. Если вам требуется полиморфизм и для элементов в массиве и для документов, то необходимо воспользоватся паттерном Визитор, как совершенно справедливо заметил scorpi_, так как "double dispatch"!
Ну что,всех примерил?
Теперь подведем итог, согласно вашей постановке задачи:
В ответ на:
Элементы массива преобразовываются в элементы некоего документа. Операция преобразования может отличаться для разных типов документов и состояния конкретного элемента массива.
Элементы массива преобразовываются в элементы некоего документа. Операция преобразования может отличаться для разных типов документов и состояния конкретного элемента массива.
1. Если "состояния конкретного элемента массива" можно передать через полиморфизм (т.е. иерархия и т.д.), а тип документа предположим только один, то вариант "Murr/voxel3d": коллекция с ссылками на базовый класс, а функтор не требует полиморфизма, так как определяет документ, который только один.
2. Если "состояния конкретного элемента массива" не требует полиморфизм (может вы имеете в виду разный state в стате-машине внутри элемента

3. Если вам требуется полиморфизм и для элементов в массиве и для документов, то необходимо воспользоватся паттерном Визитор, как совершенно справедливо заметил scorpi_, так как "double dispatch"!
Ну что,всех примерил?
