2010-08-02 109 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; 
});