我有两个类之间的一对多关系,其中拥有的类可以是多个类型。数据模型要求超类中的关系可以在子类中“子集”。
关系的每一端看起来像这样:
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>>
。
这可能吗?
答案 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
实例。