在C#中,我可以创建一个迭代器(或C#land中的IEnumerable
),它接受另一个迭代器并选择原始类型的成员:
class ParentType
{
public MemberType member { get; private set; }
}
// And somewhere else
IEnumerable<MemberType> getMembers(IEnumerable<ParentType> parents)
{
for each (ParentType parent in parents)
yield return parent.member;
}
我如何在C ++中执行类似的操作,我想基本上采用类型的迭代器,并返回迭代特定成员的迭代器?
答案 0 :(得分:0)
嗯,使用LINQ它更容易:
var m = from p in parents
select p.member;
或
var m = parents.Select(_ => _.member);
不幸的是,你不能在c ++中编写易于开箱即用的懒惰枚举...如果不使用外部库,你可以编写一个'渴望'的选择器(虽然没有本地lambda的痛苦):
std::transform(
parents.begin(), parents.end(),
std::back_inserter(members), [] (const parent& p) -> member {
return p.member;
});