我正在将 boost::lambda 作为一种创建通用算法的方法,该算法可以与任何类的任何“getter”方法一起使用。
该算法用于检测属性的重复值,我希望它适用于任何类的任何属性。
在 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。