Использование boost :: flyweight <T>внутри структуры T {} (т. Е. Рекурсивных весов) - PullRequest
1 голос
/ 22 декабря 2010

Я пытаюсь определить неизменяемый тип значения пути к файлу, используя преимущество 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 Ответ

2 голосов
/ 23 декабря 2010

В этом примере показано, как объединить Boost.Flyweight с рекурсивной структурой данных, используя Boost.Variant и boost::recursive_wrapper.Может быть, вы можете использовать аналогичный подход для вашей проблемы.

...