Эквивалент C ++ C # Func

Следующий код вычисляет среднее значение определенного свойства T в коллекции items :

public double Average<T>(IList<T> items, Func<T, double> selector)
{
    double average = 0.0;

    for (int i = 0; i < items.Count; i++)
    {
        average += selector(items[i])
    }

    return average / items.Count;
}

Затем я могу вызвать это с помощью лямбда выражение:

double average = Average(items, p => p.PropertyName);

Как мне сделать это в C ++? Вот что у меня есть на данный момент:

template <typename T>
double average(const vector<T>& items, ?)
{
    double average= 0.0;

    for (int i = 0; i < items.size(); i++)
    {
        average += ?;
    }

    return average/ items.size();
}

Как я могу вызвать это с помощью лямбда-выражения c ++ ?


Редактировать: Большое спасибо, вот что у меня получилось:

template <typename T>
double average(const vector<T>& items, function<double(T)> selector)
{
    double result = 0.0;

    for (auto i = items.begin(); i != items.end(); i++)
    {
        result += selector(*i);
    }

    return result / items.size();
}

И в main () :

zombie z1;
z1.hit_points = 10;

zombie z2;
z2.hit_points = 5;

items.push_back(z1);
items.push_back(z2);

double average = average<zombie>(items, [](const zombie& z) {       
    return z.hit_points;
});
9
задан aligray 25 June 2011 в 05:40
поделиться