Boostを語れゴラァ part5
■ このスレッドは過去ログ倉庫に格納されています
0244デフォルトの名無しさん
2007/12/26(水) 05:38:45ごめん、上でArgs::inheritedとか書いたけど無視してくれ
Argsがタプルならこの方法でconsリストを取り出せるけど、Argsとして渡されるのは最初からconsリストだった。
で、そのファンクタの場合も、boost::tuples::elementとis_sameとif_cでちまちまテストしてもいいし、
部分特殊化で一気にディスパッチしてもいい。
後者なら、メンバテンプレートは特殊化できないので、こんな感じで。
namespace detail {
namespace bt = boost::tuples;
template <typename Args> struct A_sig;
template <typename Fun>
struct A_sig<bt::cons<Fun, bt::cons<int, bt::null_type> > > { typedef int type; };
template <typename Fun>
struct A_sig<bt::cons<Fun, bt::cons<double, bt::null_type> > > { typedef double type; };
template <typename Fun>
struct A_sig<bt::cons<Fun, bt::cons<int, bt::cons<int, bt::null_type> > > > { typedef void type; };
}
struct A {
template <typename Args>
struct sig { typedef typename detail::A_sig<Args>::type type; };
/* 以下略 */
■ このスレッドは過去ログ倉庫に格納されています