Tengo un problema con una plantilla de clase. Quiero que los datos privados en una clase para ser un vector de vectores de algún tipo de tipo numérico, es decir:La plantilla de la clase C++ es una plantilla: el argumento de la plantilla no es válido
std::vector<std::vector<double> >
std::vector<std::vector<std::complex<double> > >
Pero quiero que el tipo de vector (estoy usando una biblioteca de vectores de terceros, junto con stl vectores), y el tipo de elemento a ser modelado. Probé plantillas de plantillas, pero ahora no creo que esa sea la solución a mi problema. Un ejemplo muy simplificado es:
#include <complex>
#include <vector>
template<typename T>
class Fred {
std::vector<T> data_;
};
int main(){
Fred<std::vector<double> > works;
//Fred<std::vector<std::complex<double> > doesnt_work;
return 0;
}
Como se muestra compila bien, pero si I descomentar la segunda línea en el principal, consigo el error (g ++ 4.6):
error: template argument 1 is invalid
¿Por qué recibo este ¿error? ¿Y alguien tiene una solución sugerida? Gracias!
Cuente los '<' sy los '>' s en la línea que no funciona. Falta uno ... –
Ese es un mensaje de error realmente pobre, completamente engañoso. –
@PeteBecker: Es una pena. Me estaba preparando para desenterrar mi [reencuadernador de plantilla] (http://stackoverflow.com/a/11723847/596781). –