Я рассматриваю 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());
Я могу заставить работать часть "любого класса", используя интерфейсы или шаблоны, но пока не нашел, как заставить работать часть "для любого метода".
Есть ли способ сделать что-то похожее на лямбду "d => d.GetId ()" в C ++ (с Boost или без)?
Альтернатива, приветствуются и другие решения на C ++ ian, чтобы сделать алгоритм универсальным.
Я использую C ++ / CLI с VS2008, поэтому я не могу использовать лямбды C ++ 0x.