następujący kod:C++: częściowa specjalizacja szablonu klas szablonu
using namespace std;
template <typename X>
class Goo {};
template <typename X>
class Hoo {};
template <class A, template <typename> class B = Goo >
struct Foo {
B<A> data;
void foo1();
void foo2();
};
template <typename A>
void Foo<A>::foo1() { cout << "foo1 for Goo" << endl;}
int main() {
Foo<int> a;
a.foo1();
}
daje mi błąd kompilatora:
test.cc:18: error: invalid use of incomplete type 'struct Foo<A, Goo>'
test.cc:11: error: declaration of 'struct Foo<A, Goo>'
Dlaczego nie mogę częściowo specjalizują foo1()? Jeśli to nie jest sposób, w jaki sposób mogę to zrobić?
Mam inne pytanie: co jeśli chcę, aby foo2() było zdefiniowane tylko dla A = int, B = Hoo i nie dla żadnej innej kombinacji, jak to zrobić?
To nie jest częściowa specjalizacja, Foo przyjmuje dwa parametry i podacie tylko jedną w 'Foo :: foo1'. –
@BoPersson: Myślę, że częściowo specjalizuję się. Drugi parametr szablonu to domyślnie Goo. – user231536
Co to jest X w Goo. Goo jest szablonem przyjmującym parametr X. Gdzie jest określony? –
jmucchiello