通过成员将C ++迭代器转换为迭代器(选择迭代器?)

时间:2010-08-02 22:02:08

标签: stl iterator

在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 ++中执行类似的操作,我想基本上采用类型的迭代器,并返回迭代特定成员的迭代器?

1 个答案:

答案 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;
 });