我有一个简单的类层次结构:
class Node { };
class InternalNode : public Node { };
class Leaf : public Node { };
void f(unordered_map<unsigned, unique_ptr<Node>>& node_table)
{
auto it_node = node_table.find(index);
unique_ptr<InternalNode> node;
if (it_node != node_table.end())
{
node = std::move(it_node->second.get()); // no viable overloaded '='
node = dynamic_cast<InternalNode*>(it_node->second.get()); // no viable conversion from 'InternalNode *' to 'unique_ptr<InternalNode>'
node = dynamic_cast<InternalNode&>(it_node->second.get()); // dynamic_cast from rvalue to reference type 'InternalNode &'
// ...
// dynamic_cast from rvalue to reference type 'InternalNode &'
} else {
node = make_unique<InternalNode>(values.at(index), colors.at(index), depth);
}
}
所以我想在node_table中动态插入和检索值,node_table映射在超类“Node”上。遗憾的是,到目前为止还没有办法分配检索到的值并将其从“Node”转换为“InternalNode”。在这一点上,肯定是“InternalNode”而不是“Leaf”。 我尝试了几个例子,应该有一个或多或少的简单解决方案。