0

Javaでは、型を指定せずに汎用クラスの変数を定義できます。

class Tree<T extends Comparable<? super T>> {}
somewhere-else: Tree tree;

次に、ファイルからオブジェクトを読み込んで、希望するクラスタイプに型キャストできます。

tree = (Tree<String>) some object;

boost::variant私はバリアント定義を始めました。

typedef boost::variant<Tree<std::string>, Tree<int>> TreeVariant; TreeVariant tree;

を指定する必要があることはわかっていますが、この例から、変数またはのいずれかに割り当てることができるように定義する方法がvisitor class明確ではありません。treeTree<std::string>Tree<int>

次に、変数を使用してTreeのメンバー関数を呼び出しますtree

4

1 に答える 1

5

に値を割り当てるためにビジターを作成する必要はありませんboost::variantチュートリアルの「基本的な使用法」セクションに示されているように、値を割り当てるだけです。

TreeVariant tree;
Tree<std::string> stringTree;
Tree<int> intTree;
tree = stringTree;
tree = intTree;

メンバー関数の呼び出しについては、ビジターを使用する必要があります。

class TreeVisitor : public boost::static_visitor<>
{
public:
  void operator()(Tree<std::string>& tree) const
  {
    // Do something with the string tree
  }

  void operator()(Tree<int>& tree) const
  {
    // Do something with the int tree
  }
};

boost::apply_visitor(TreeVisitor(), tree);

static_visitor次のように、から値を返すこともできます。

class TreeVisitor : public boost::static_visitor<bool>
{
public:
  bool operator()(Tree<std::string>& tree) const
  {
    // Do something with the string tree
    return true;
  }

  bool operator()(Tree<int>& tree) const
  {
    // Do something with the int tree
    return false;
  }
};

bool result = boost::apply_visitor(TreeVisitor(), tree);
于 2013-03-27T13:55:59.930 に答える