Использование boost::flyweight<T> внутри struct T {} (т. Е. Рекурсивных весов)
Я пытаюсь определить неизменный тип значения пути к файлу, используя преимущество boost::flyweight для совместного использования компонентов пути. Что-то вроде этого:
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<>
заставить эту структуру работать, и если да, то как?
1 ответ
В этом примере показано, как объединить Boost.Flyweight с рекурсивной структурой данных, используя Boost.Variant и boost::recursive_wrapper
, Может быть, вы можете использовать аналогичный подход для вашей проблемы.