#include <iostream>
#include <vector>
#include <numeric>

template<typename Iter, typename T>
double mean(Iter begin, Iter end, double (T::*member))
{
	size_t n = 0;
	double s = std::accumulate(begin, end, 0.0,
		[&](double acc, const T &t){ ++n; return acc + t.*member; }
	);
	return s / n;
}

struct T
{
    double a;
    double b;
};

int main() {
	std::vector<T> v = {{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}};
	std::cout << mean(v.begin(), v.end(), &T::a) << std::endl;
	std::cout << mean(v.begin(), v.end(), &T::b) << std::endl;
	return 0;
}