次のようなコードがあります。
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), tuples::get<1, DataPoint>);
残念ながら、最後の行はコンパイルされません。次のようなメッセージが表示されます。
/path/to/boost/tuple/detail/tuple_basic.hpp: `boost::tuples::cons' のインスタンス化: /path/to/boost/tuple/detail/tuple_basic.hpp:144: `boost::tuples::element >' からインスタンス化 program.cc:33: ここからインスタンス化 /path/to/boost/tuple/detail/tuple_basic.hpp:329: エラー: `boost::tuples::cons::tail' の型が不完全です /path/to/boost/tuple/detail/tuple_basic.hpp:329: エラー: テンプレート型パラメーターの使用が無効です /path/to/boost/tuple/detail/tuple_basic.hpp:151: 以前のエラーで混乱し、救済されました
基本的に、Python の operator.itemgetter 関数を使用するには、次のようにします。
transform(data.begin(), data.end(), back_inserter(values), itemgetter(2))
Boostを使用してそれを行うにはどうすればよいですか?