Estoy trabajando en una clase XmlWriter
, y quería poder mostrar atributos o texto en la mayoría de los formatos de datos estándar (cadenas, enteros, números flotantes, etc.). Para lograr esto, estoy usando una secuencia de archivos.¿Cómo puedo usar la especialización de plantillas en clases de C++ y por qué esto no se compila?
Para el tipo de datos bool
, quería especificar una especialización de la plantilla, de forma que produzca true
y false
en lugar de 1
y 0
.
Sin embargo, no parece el siguiente código para compilar:
class XmlWriter {
private: /* ... */
public: /* ... */
template <typename T>
void writeText(T text) {
/* ... */
}
template <> // <-- error: explicit specialization in non-namespace scope 'class Strategy::IO::XmlWriter'
void writeText<bool> (bool text) { // <-- error: template-id 'writeText<>' in declaration of primary template
/* ... */
}
template <typename T>
void writeAttribute(std::string key, T value) { // <-- error: too many template-parameter-lists
/* ... */
}
template <> // <-- error: explicit specialization in non-namespace scope 'class Strategy::IO::XmlWriter'
void writeAttribute<bool> (std::string key, bool value) { // <-- error: variable or field 'writeAttribute' declared void; expected ';' before '<' token
/* ... */
}
}; // <-- expected ';' before '}' token
No entiendo, ¿por qué todos estos errores, ya que utilizamos la sintaxis correcta presentado en varios sitios web en Internet?
Estoy usando Cygwin GCC.
Este compilado bien en VC2010. En lugar de proporcionar especializaciones, puede sobrecargar las funciones: 'void writeText (texto bool);'. – hmjd
Bueno, afaik VC2010 no cumple con los estándares ... el código no se compila en GCC. – Tibi
¿qué versión de gcc? – hmjd