2010-08-02 112 views
2

在C#,我可以创建一个迭代(或者在C#土地IEnumerable)这需要另一个迭代,并且选择的原始类型的成员:转换一个C++迭代到迭代器上的部件(选择迭代?)

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

嗯,使用LINQ那就更简单了:

var m = from p in parents 
select p.member; 

var m = parents.Select(_ => _.member); 

不幸的是,你可以不写懒枚举那么容易出在C++中框......没有诉诸一个外部库,你可以写一个'渴望'选择器(尽管没有本地lambdas疼痛):

std::transform(
parents.begin(), parents.end(), 
std::back_inserter(members), [] (const parent& p) -> member { 
    return p.member; 
});