This is much simpler with newer libraries (boost) and or standards (C++11), but you should be able to write a small functor:
struct ReadNodeName {
std::string const & operator()(Node const & node) const {
return node.name;
}
};
And then use std::transform
std::transform(nodes.begin(), nodes.end(),
std::back_inserter(names),
ReadNodeName());
With boost, the functor could be just boost::bind
, in C++11 you could use a lambda: [](Node const & node) { return node.name; };
, in C++14 a shorter lambda [](auto& n) { return n.name; }
:
std::transform(nodes.begin(), nodes.end(),
std::back_inserter(names),
[](auto & n){return n.name;});
Using boost bind -- beware, untested, I don't have access to boost
std::transform(nodes.begin(), nodes.end(),
std::back_inserter(names),
boost::bind(&Node::name, _1));