在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
,但this example如何定义它并不清楚,以便我能够将tree
变量分配给Tree<std::string>
}或Tree<int>
。
然后我想从那里继续使用变量tree
调用Tree的成员函数。
答案 0 :(得分:5)
无需创建访问者以将值分配给boost::variant
。如本教程的Basic Usage部分所示,您只需指定值:
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);