Для этого вам нужно boost::bind
.
double get2(boost::tuple<int,int,double> const& v ) {
return boost::get<2>(v) ;
}
int main () {
using namespace std ;
using namespace boost ;
typedef tuple<int, int, double> DataPoint;
vector<DataPoint> data;
vector<double> third_column_only;
// Code to read in data goes here.
transform(data.begin(), data.end(), back_inserter(values), bind(get2, _1);
}
На самом деле, функция get2
также не нужна, но мы должны точно указать аргумент шаблона для функции boost::get
, возможно, такой:
transform(data.begin(), data.end(), back_inserter(values),
bind(get<2, int, tuple<int, double> >, _1);
Обидно, что я не могу указать аргумент шаблона, поэтому я использовал вспомогательную функцию. Извините за это.