Использование Boost :: Flayweight Inside struct T {} (т.е. рекурсивные вылеты)
-
12-10-2019 - |
Вопрос
Я пытаюсь определить неизбежный тип значения файла, используя преимущества Boost :: Flayweight для обмена компонентами пути. Что-то вроде этого:
struct filepath_data;
typedef boost::flyweight<filepath_data> filepath;
struct filepath_data {
boost::optional<filepath> parent;
std::string name;
};
Конечно, это похоже на рекурсивную структуру, но boost::flyweight<T>
на самом деле не содержит копии T
, просто ручка к T
который можно найти в соответствующем держателе, поэтому я думаю, что эта структура должна работать.
К сожалению, он не компилируется, потому что, когда G ++ попадает в Typedef, он жалуется, что FilePath_Data неполна.
Итак, вопрос в том, могу ли я использовать гибкость и более продвинутые аргументы шаблона для boost::flyweight<>
Чтобы эта структура работала, и если да, то как?
Решение
Этот пример показывает, как объединить Boost.flyweight с рекурсивной структурой данных, используя Boost.variant а также boost::recursive_wrapper
. Анкет Может быть, вы можете использовать аналогичный подход для вашей проблемы.