3
Учитывая, я могу это сделать:шаблон специализации для неспециализированных аргументов шаблона
template <class T>
struct foo {
typedef T type;
};
template <template <size_t> class B>
struct foo2 {
typedef B<0> type;
};
struct bar1 {};
template <size_t N = 1>
struct bar2 {};
// usage
foo<bar1>::type // ok, = bar1
foo<bar2<> >::type // ok, = bar2<1>
foo2<bar2>::type // ok, = bar2<0>
Могу ли я частично специализировать Foo принять неразделенный класс аргумент BAR2? как:
foo<bar2>::type // should give me bar2<0>
Я пытался что-то ниже, но это не работает:
// compile error
template <template <size_t> class B>
struct foo<B> {
typedef B<0> type;
};
'bar2' не является типом, это шаблон. Вы хотите 'bar2 <>'. И вы не можете «перегружать» шаблоны так, как вы пытаетесь. –