#include <iostream>
#include <deque>
#include <functional>
struct way_point
{
double time_stamp_s;
unsigned int gps_nb;
// Rest of members
};
double Get_time_stamp_s(way_point& wp) { return wp.time_stamp_s; }
double Get_gps_nb (way_point& wp) { return wp.gps_nb; }
// Rest of get-functions
template<typename T>
std::deque<double> getVector(std::deque<way_point>& dwp, std::function<T(way_point&)> f)
{
std::deque<double> vd;
for (auto& it : dwp)
{
vd.emplace_back(f(it));
}
return vd;
}
int main()
{
std::deque<way_point> dwp { {1.0,1}, {2.0,2}, {3.0,3} };
std::deque<double> vd = getVector<double>(dwp, Get_time_stamp_s);
for (auto& it : vd)
{
std::cout << "Double: " << it << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgoKc3RydWN0IHdheV9wb2ludAp7CiAgICBkb3VibGUgdGltZV9zdGFtcF9zOwogICAgdW5zaWduZWQgaW50IGdwc19uYjsKICAgIC8vIFJlc3Qgb2YgbWVtYmVycwp9OwoKZG91YmxlIEdldF90aW1lX3N0YW1wX3Mod2F5X3BvaW50JiB3cCkgeyByZXR1cm4gd3AudGltZV9zdGFtcF9zOyB9CmRvdWJsZSBHZXRfZ3BzX25iICAgICAgKHdheV9wb2ludCYgd3ApIHsgcmV0dXJuIHdwLmdwc19uYjsgICAgICAgfQovLyBSZXN0IG9mIGdldC1mdW5jdGlvbnMKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0ZDo6ZGVxdWU8ZG91YmxlPiBnZXRWZWN0b3Ioc3RkOjpkZXF1ZTx3YXlfcG9pbnQ+JiBkd3AsIHN0ZDo6ZnVuY3Rpb248VCh3YXlfcG9pbnQmKT4gZikKewogICAgc3RkOjpkZXF1ZTxkb3VibGU+IHZkOwogICAgZm9yIChhdXRvJiBpdCA6IGR3cCkKICAgIHsKICAgICAgICB2ZC5lbXBsYWNlX2JhY2soZihpdCkpOwogICAgfQogICAgcmV0dXJuIHZkOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6ZGVxdWU8d2F5X3BvaW50PiBkd3AgeyB7MS4wLDF9LCB7Mi4wLDJ9LCB7My4wLDN9IH07CgogICAgc3RkOjpkZXF1ZTxkb3VibGU+IHZkID0gZ2V0VmVjdG9yPGRvdWJsZT4oZHdwLCBHZXRfdGltZV9zdGFtcF9zKTsKCiAgICBmb3IgKGF1dG8mIGl0IDogdmQpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJEb3VibGU6ICIgPDwgaXQgPDwgc3RkOjplbmRsOwogICAgfQp9