在struct T {}中使用boost :: flyweight <t>(即递归flyweights)</t>

时间:2010-12-22 14:00:25

标签: boost flyweight-pattern

我正在尝试定义一个不可变的文件路径值类型,利用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 个答案:

答案 0 :(得分:2)

This example展示了如何使用Boost.Variantboost::recursive_wrapper将Boost.Flyweight与递归数据结构相结合。也许你可以对你的问题使用类似的方法。