Boost :: Flyweight 内部struct t {}(すなわち、再帰的なフライ級)の使用

StackOverflow https://stackoverflow.com/questions/4509892

  •  12-10-2019
  •  | 
  •  

質問

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, 、aのハンドルだけです T 適切なホルダーで調べることができるので、この構造は機能するはずだと思います。

残念ながら、g ++がtypedefにヒットすると、filepath_dataが不完全であると不満を言うため、コンパイルしません。

ですから、問題は、柔軟性とより高度なテンプレートの引数を利用できますか? boost::flyweight<> この構造を機能させるために、そしてもしそうなら、どのように?

役に立ちましたか?

解決

この例 boost.flyweightと再帰データ構造を使用して組み合わせる方法を示します boost.variantboost::recursive_wrapper. 。たぶん、あなたはあなたの問題に同様のアプローチを使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top