[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
643(1): 2007/01/19(金)06:57 AAS
>>641
getは設計が古くなっている。
戻り値指定なしでもできるが長くなるのでこんな感じで
template<typename Result, int i>
struct get
{
/**/ typedef Result result_type;
/**/ template<typename Tuple>
/**/ Result operator()(Tuple& t) const
/**/ { return boost::get<i>(t); }
};
bind(get<double, 0>(), _1);
646: 2007/01/20(土)00:52 AAS
>>643
おお、ありがとう。
やっぱり戻り値の型が判別できないのが問題なのかな?
色々いじりつつ、もう一度 lambda の sig を読んでみたら、今度はちょっと分かった気が。
template <int i>
struct get {
/**/ template <class Tuple>
/**/ typename boost::tuples::element<i, Tuple>::type operator()(Tuple& t) const {
/******/ return boost::get<i>(t);
/**/ }
/**/ template <class Args>
/**/ class sig {
/******/ typedef typename boost::tuples::element<1, Args>::type Tuple;
/******/ typedef typename boost::tuples::element<i, Tuple>::type Result;
/**/ public:
/******/ typedef typename boost::remove_cv<Result>::type type;
/**/ };
};
bind(get<0>(), _1);
ってことで、こう書いたらとりあえず行けたんだが、こんな感じでいいのかな?
もっといいやり方があったりするんだろうか。
しかし、関数オブジェクトならこれでいい(?)けど、テンプレート関数には sig は使えないよね。
ということは、関数の場合はテンプレート引数を全部指定しないとダメってことかな。
いや、でも、boost::get<> のテンプレート引数全部指定してもダメだったし、キャストしてもムリだったような。
なんかまたよくわからなくなってきた…(´・ω・`)
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.040s