4
template <template <typename> class F> struct call_me {};
template <typename T> struct maybe;
template <typename... T> struct more;

int main()
{
  call_me<maybe> a; // ok
  call_me<more> b;  // error
}

call_me<more>失敗する理由がわかりました。しかし、私はそれを機能させたいです。

変更を伴わないcall_me(または専門化を追加する) 回避策はありますか?

4

3 に答える 3

4
template <template <typename> class F> struct call_me {};
template <typename T> struct maybe;
template <typename... T> struct more;
template <template <class...> class F> struct just_one {
  template <class A> using tmpl = F<A>;
};

int main()
{
  call_me<maybe> a; 
  call_me<just_one<more>::tmpl> b;  
}

完全に同等ではありませんが、十分に近いかもしれません。

于 2013-01-21T21:08:37.240 に答える
1
template <typename T> using onemore = more<T>;

int main()
{
    call_me<onemore> b;
}
于 2013-01-22T02:07:34.293 に答える
0

ラップできますmore

template <template <typename...> class Tmpl>
struct variwrap
{
    template <typename> struct Dummy
    {
        template <typename ...Brgs>
        struct rebind
        {
            typedef Tmpl<Brgs...> other;
        };
    };
};

今、あなたは言うことができcall_me<variwrap<more>::Dummy>、消費者はF::rebind<Args...>::other回復するために使用できますmore<Args...>. もちろん、それがメンバーを持っているcall_meことを知る方法がないため、特殊化を追加する必要があります。F rebind

うん。

于 2013-01-21T21:01:08.573 に答える