我正在尋找boost :: lambda作爲一種通用算法,可以與任何類的任何「getter」方法一起使用。Boost lambda:對象的調用方法
該算法用於檢測屬性的重複值,我希望它適用於任何類的任何屬性。
在C#中,我會做這樣的事情:
class Dummy
{
public String GetId() ...
public String GetName() ...
}
IEnumerable<String> FindNonUniqueValues<ClassT>
(Func<ClassT,String> propertyGetter) { ... }
例使用的方法:
var duplicateIds = FindNonUniqueValues<Dummy>(d => d.GetId());
var duplicateNames = FindNonUniqueValues<Dummy>(d => d.GetName());
我可以得到的「任何類」部分的工作,即使用接口或模板方法,但尚未找到如何使「用於任何方法」的部分工作。
有沒有辦法在C++中使用類似於「d => d.GetId()」lambda的方法(使用或不使用Boost)?
另外,更多的C++ ian解決方案使算法具有通用性也是值得歡迎的。
我使用VS2008的C++/CLI,所以我不能使用C++ 0x lambdas。
如果它適合你,一個*「多C++伊恩解決方案」 *會去用的''職能的風格,例如見'獨特()'/'unique_copy()'。 –
2010-05-01 20:16:50
我的理解是,如果我有一個向量,並且想要在向量中找到非唯一的T,而不是在尋找非唯一的T.method( ) –
ckarras
2010-05-01 20:31:40
像unique()這樣的許多算法調用都有第二種形式允許傳遞謂詞,而不是使用默認操作 - 例如'unique(myVec.begin(),myVec.end(),myComparator())'。 – 2010-05-01 23:40:47