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.Variantとを使用してBoost.Flyweightを再帰的データ構造と組み合わせる方法を示していますboost::recursive_wrapper。たぶん、あなたはあなたの問題に同様のアプローチを使うことができます。

于 2010-12-23T07:15:05.703 に答える