Использование Boost :: Flayweight Inside struct T {} (т.е. рекурсивные вылеты)

StackOverflow https://stackoverflow.com/questions/4509892

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top