gpt4 book ai didi

c++ - 升压::变体;定义访客类别

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:01 26 4
gpt4 key购买 nike

在 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 的成员函数.

最佳答案

无需创建访问者来为 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);

关于c++ - 升压::变体;定义访客类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com