Para entender todo lo que me has puesto y ver más en profundidad el tema de plantillas y herencias, he estado un rato leyendo este artículo que para mi está siendo bastante asequible:
http://www.codeproject.com/Articles/...mplates-Part-1 http://www.codeproject.com/Articles/...Templates-Part
(Voy por la parte 1)
Entonces habla de como implementar el constructor copia en una clase con plantilals, con este ejemplo:
Código C++:
Ver originalPair(const Pair<Type1, Type2>& OtherPair) :
first(OtherPair.first),
second(OtherPair.second)
{}
Además advierte expresamente que no poner los tipos dará un error:
Please note that it is very much required to specify template type arguments of Pair<>, for the argument of this copy-constructor. The following specification wouldn't make sense, since Pair is not a non-template type:
Código C++:
Ver originalPair(const Pair& OtherPair) // ERROR: Pair requires template-types
Pero yo acabo de hacerlo "mal" a ver qué pasa y me funciona:
Código C++:
Ver originaltemplate<class T1, class T2>
struct pareja
{
T1 first;
T2 second;
//constructor
pareja():first(T1()),second(T2()) {}
pareja(const T1&t1,const T2&t2):first(t1),second(t2) {}
pareja(const pareja& p) //<----aqui lo estoy haciendo mal pareja(const pareja<T1,T2>& p)
{
first=p.first;
second=p.second;
}
bool operator == (const pareja<T1,T2>& Other) const
{
return first == Other.first &&
second == Other.second;
}
};
¿Sabéis por qué es así?
Gracias como siempre!