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

Is it possible to cast the contents of a C++17 stl collection?

我有两个 类 之间的一对多关系,其中拥有的 类 可以是不止一种类型。数据模型要求超类中的关系可以是子类中的'subsetted'。

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

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>>

这可能吗?

大致如下:

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 实例。