2010-12-22 50 views
1

我想定义一个不可变的文件路径值类型,利用boost :: flyweight共享路径组件。事情是这样的:使用boost :: flyweight <T>里面的struct T {}(即递归flyweights)

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<>的灵活性和更高级的模板参数来使这个结构起作用,如果是这样,如何?

回答