cka*_*ras 0 c++ boost boost-lambda
我正在研究boost :: lambda作为一种通用算法,可以使用任何类的任何"getter"方法.
该算法用于检测属性的重复值,我希望它适用于任何类的任何属性.
在C#中,我会做这样的事情:
class Dummy
{
public String GetId() ...
public String GetName() ...
}
IEnumerable<String> FindNonUniqueValues<ClassT>
(Func<ClassT,String> propertyGetter) { ... }
Run Code Online (Sandbox Code Playgroud)
示例使用方法:
var duplicateIds = FindNonUniqueValues<Dummy>(d => d.GetId());
var duplicateNames = FindNonUniqueValues<Dummy>(d => d.GetName());
Run Code Online (Sandbox Code Playgroud)
我可以使用接口或模板方法来获取"任何类"部分,但尚未找到如何使"for any method"部分工作.
有没有办法在C++中使用类似"d => d.GetId()"lambda(有或没有Boost)?
另外,更多的C++ ian解决方案也可以使算法通用.
我正在使用带有VS2008的C++/CLI,所以我不能使用C++ 0x lambdas.
假设,我明白你在寻找什么,你可以使用boost::bind:
FindNonUniqueValues<Dummy>(boost::bind(&Dummy::GetId, _1));
Run Code Online (Sandbox Code Playgroud)
实际上,你只需要boost::mem_fn甚至std::mem_fun,但boost::bind会让你更具普遍性.
在这种情况下,您将定义FindNonUniqueValues为:
template <typename T>
/* ? */ FindNonUniqueValues(boost::function<std::string (const T&)> getter) { ... }
Run Code Online (Sandbox Code Playgroud)
在这里,我不确定你如何FindNonUniqueValues获取它的对象列表(或者它应该返回的内容 - IEnumerable就像迭代器一样?),所以你可以填写它.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |