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<>
この構造を機能させるために柔軟性とより高度なテンプレート引数を利用できるかどうかです。その場合、どのように機能しますか?