Решение или альтернатива для рекурсивного представленияC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Решение или альтернатива для рекурсивного представления

Сообщение Гость »

Мы хотим реализовать дерево элементов: < /p>

Код: Выделить всё

       +----------------------+
|   Item (interface)   |
+----------------------+
| + getName(): string  |-----------+
+----------------------+           |
^                     |
|                     |
+------+------+              |
|             |              |
+-------------+      +------------+    |
| SimpleItem  |      |   Group    |--+
+-------------+      +------------+
| +add(Item) |
| +all()     |
+------------+
Функция group :: all () должна вернуть сплюснутое рекурсивное представление всех элементов, включая Self, как пары: {Уровень рекурсии, элемент}.
Реализация с использованием диапазонов :: siews , как возвращаемый тип . элементы не тот же тип, что и представление элементов ).
Таким образом, этот код не компилируется:

Код: Выделить всё

auto all(size_t level = 0) const {
return views::concat(
views::single(std::pair(level, shared_from_this())),
views::join(items |
views::transform([level](const auto& item) {
auto group = std::dynamic_pointer_cast(item);
if (group == nullptr) {
return views::single(std::pair{level + 1, item});
}
else {
return group->all(level + 1);
}
})
)
);
}
код: https://compiler-explorer.com/z/fdc8rswae
Любая идея, как сделать all функциональный работа и вернуть желаемый сплюснутый вид всех рекурсивных элементов? concat , который добавляется в std :: jarges только в C ++ 26. Решения могут полагаться либо на std :: janges, либо на диапазоны-V3.

Подробнее здесь: https://stackoverflow.com/questions/794 ... rsive-view
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»