Ho il seguente problema:C++ come differenziare tra modello per contenitore e tipo nativo
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());
}
ottengo il seguente errore:
error: ‘template<class T> void myclass::set(std::string, T)’ cannot be overloaded
error: with ‘template<class T> void myclass::set(std::string, T)’
C'è un modo per distinguere tra tipi di contenitori e altri tipi nei modelli?
caratteri morfologici. Sembra che tu abbia bisogno di creare il tuo tratto is_container (http://stackoverflow.com/questions/7617203/is-it-possible-to-use-type-traits-to-check-whether-a-type-is-a -contenitore). (Non l'ho fatto prima, e sto solo aspettando una compilazione per completare, quindi non una risposta completa - scusa.Ma sarei interessato alla soluzione;)) – peterchen
Vuoi 'const T & data', e' ss << data' ?? –
Questa è * quasi * una grande domanda, ma ci sono alcuni errori di sintassi che hanno reso la risposta più difficile del necessario. ('T' dovrebbe essere' data' sulla terza riga della prima forma di 'set' e le tue chiamate a' write' mancano di un ')' ma sono ancora errate dopo averlo aggiunto. – Flexo