4

バリアントを使用して、C++ で PDF オブジェクト型を表現しようとしています。PDF オブジェクトは次のいずれかです。

  • Boolean
  • Integer
  • Real
  • String
  • Name
  • Stream
  • Array<Object>
  • Map<Object, Object>

ご覧のとおり、型は型の宣言を必要とする型の宣言を必要とするObjectため、型は相互に再帰的です。この型をC ++で表現するにはどうすればよいですか? バリアントが最善の方法ではない場合、それは何ですか?ArrayMapArray

これは私がこれまでに試したことですが、std::unordered_map(私が思うに)http://coliru.stacked-crooked.com/a/699082582e73376eの要件のためにコンパイルされません

4

1 に答える 1

5

を使用しているためboost::variant、その再帰ラッパーを使用することの何が問題になっていますか?

チュートリアルで短い例を見ることができます:

typedef boost::make_recursive_variant<
      int
    , std::vector< boost::recursive_variant_ >
    >::type int_tree_t;

std::vector< int_tree_t > subresult;
subresult.push_back(3);
subresult.push_back(5);

std::vector< int_tree_t > result;
result.push_back(1);
result.push_back(subresult);
result.push_back(7);

int_tree_t var(result);

そして、それは期待どおりに機能します。

于 2013-09-28T15:06:23.177 に答える