1

我正在尝试定义一个不可变的文件路径值类型,利用 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<>来使这个结构工作吗?如果可以,怎么做?

4

1 回答 1

2

这个例子展示了如何使用Boost.Variantboost::recursive_wrapper. 也许您可以使用类似的方法来解决您的问题。

于 2010-12-23T07:15:05.703 回答