是否可以转换 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
实例。
我有两个 类 之间的一对多关系,其中拥有的 类 可以是不止一种类型。数据模型要求超类中的关系可以是子类中的'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
实例。