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