现在我们已经解决了这个问题,这里有一个有效的解决方案,它不涉及
std::function
#include <iostream>
#include <vector>
#include <algorithm>
struct A
{
int x;
double y;
};
template <typename T, typename U>
auto extract(const std::vector<T>& vec, U T::* member)
{
std::vector<U> result;
result.reserve(vec.size());
std::transform(
std::begin(vec), std::end(vec), std::back_inserter(result),
[member] (const T& val) { return val.*member; }
);
return result;
}
int main() {
std::vector<A> as{{10, 3.14}, {42, 1.618}};
auto result = extract(as, &A::x);
for (auto x : result)
std::cout << x << std::endl;
return 0;
}
https://ideone.com/ewieLc