Boost lambda: Invoke method on object

Posted by ckarras on Stack Overflow See other posts from Stack Overflow or by ckarras
Published on 2010-05-01T19:33:35Z Indexed on 2010/05/01 19:37 UTC
Read the original article Hit count: 303

Filed under:
|
|

I'm looking at boost::lambda as a way to to make a generic algorithm that can work with any "getter" method of any class.

The algorithm is used to detect duplicate values of a property, and I would like for it to work for any property of any class.

In C#, I would do something like this:

class Dummy
{
    public String GetId() ...
    public String GetName() ...
}

IEnumerable<String> FindNonUniqueValues<ClassT>
  (Func<ClassT,String> propertyGetter) { ... }

Example use of the method:

var duplicateIds   = FindNonUniqueValues<Dummy>(d => d.GetId());
var duplicateNames = FindNonUniqueValues<Dummy>(d => d.GetName());

I can get the for "any class" part to work, using either interfaces or template methods, but have not found yet how to make the "for any method" part work.

Is there a way to do something similar to the "d => d.GetId()" lambda in C++ (either with or without Boost)?

Alternative, more C++ian solutions to make the algorithm generic are welcome too.

I'm using C++/CLI with VS2008, so I can't use C++0x lambdas.

© Stack Overflow or respective owner

Related posts about c++

Related posts about boost