是否可以转换 C++17 stl 集合的内容?

时间:2021-08-01 21:50:55

标签: c++ stl c++17

我有两个类之间的一对多关系,其中拥有的类可以是多个类型。数据模型要求超类中的关系可以在子类中“子集”。

关系的每一端看起来像这样:

weak_ptr<Element> owner;
unordered_set<shared_ptr<Element>> ownedElements;

在超类Element上,有一个函数:

unordered_set<shared_ptr<Element>> ownedElements();

在子类上也有类似的功能:

unordered_set<shared_ptr<SubElement>> ownedSubElements();

ownedSubElements() 的实现中,我想将 unordered_set<shared_ptr<Element>> 强制转换为 unordered_set<shared_ptr<SubElement>>

这可能吗?

1 个答案:

答案 0 :(得分:0)

大致如下:

std::unordered_set<std::shared_ptr<SubElement>> subElements;
std::transform(
    ownedElements.begin(), ownedElements.end(),
    std::inserter(subElements, subElements.end()),
    [](std::shared_ptr<Element> elem) {
      return std::static_pointer_cast<SubElement>(elem);
    });

这假设您以某种方式知道 ownedElements 中的所有元素实际上都指向一个 SubElement 实例。