在unique_ptr之间进行转换

时间:2017-01-14 19:16:23

标签: c++ casting unique-ptr dynamic-cast

我有一个简单的类层次结构:

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”。 我尝试了几个例子,应该有一个或多或少的简单解决方案。

0 个答案:

没有答案