Tengo el siguiente problema:C++ cómo diferenciar entre plantilla para envase y nativo de tipo
template<class T>
void set(std::string path, const T data)
{
stringstream ss;
ss << data << std::endl;
write(path, ss.str();
}
template<class T>
void set(std::string path, const T data)
{
std::stringstream ss;
for(typename T::const_iterator it = data.begin(); it < data.end(); ++it)
{
ss << *it;
if(it < data.end() -1)
ss << ", ";
}
ss << std::endl;
write(path, ss.str());
}
me sale el siguiente error:
error: ‘template<class T> void myclass::set(std::string, T)’ cannot be overloaded
error: with ‘template<class T> void myclass::set(std::string, T)’
¿Hay una manera de diferenciar entre tipos de contenedores y otros tipos en plantillas?
rasgos de tipo. Parece que necesitas crear tu propio rasgo is_container (http://stackoverflow.com/questions/7617203/is-it-possible-to-use-type-traits-to-check-whether-a-type-is-a -envase). (No he hecho esto antes, y estoy esperando que se complete una construcción, por lo que no es una respuesta completa, lo siento.Pero me interesaría la solución;)) – peterchen
¿Quieres 'const T & data', y' ss << data' ?? –
Esta es * casi * una gran pregunta, pero hay algunos errores de sintaxis que hicieron que responder más difícil de lo necesario. ('T' debe ser' data' en la tercera línea de la primera forma de 'set' y tus llamadas a' write' faltan '' 'pero aún están equivocadas después de agregar eso). – Flexo