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