Использование 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, Может быть, вы можете использовать аналогичный подход для вашей проблемы.

Другие вопросы по тегам