el siguiente código:C++: la especialización parcial de clases de plantilla plantilla
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();
}
me da un error del compilador:
test.cc:18: error: invalid use of incomplete type 'struct Foo<A, Goo>'
test.cc:11: error: declaration of 'struct Foo<A, Goo>'
Por qué no puedo parcialmente especializarse foo1()? Si este no es el camino, ¿cómo hago esto?
Tengo otra pregunta: ¿qué pasa si quiero que foo2() se defina solo para A = int, B = Hoo y no para ninguna otra combinación, ¿cómo hago eso?
Esto no es una especialización parcial, Foo toma dos parámetros y aquí sólo se especifica una en 'Foo :: foo1'. –
@BoPersson: Creo que me estoy especializando parcialmente. El segundo parámetro de plantilla es por defecto Goo. – user231536
Y qué es X en Goo. Goo es una plantilla que toma un parámetro X. ¿Dónde está especificado? –
jmucchiello