std::string in int umwandeln



  • Ich habe im Netz folgendes gefunden:

    template<typename T>
    T convertTo(const std::string& fromString) {
    	T toT;
    	std::istringstream(fromString)>>toT;
    	return toT;
    }
    
    ...
    
    std::string buffer;
    buffer = CommandSequenz("mess", m_Channel);
    double value = convertTo(buffer);
    

    was auch sehr elegant zum umwandeln aussieht. Leider kompiliert es bei mir nicht:

    error C2783: "T convertTo(const std::string &)": template-Argument für "T" konnte nicht hergeleitet werden.

    Ist der Code so überhaupt korrekt, oder wie würde man es richtig machen?

    Matthias



  • template<typename T> 
    inline std::string toString(const T& x/*, int precision=15*/)
    {
       std::ostringstream oss;
       //oss<<std::setprecision(precision);
       oss;<<x;
       return oss.str();
    }
    template<typename T> 
    inline T stringTo(const std::string& s)
    {
      std::istringstream iss(s);
      T x;
      iss >> x;
      if(!iss) std::cerr<<"error"<<std::endl;
      return x;
    }
    

    ups, du muss zur anwendung den Rückgabetyp angeben (denn kann der compiler nicht automatisch herleiten):

    double d = stringTo<double>(buffer);
    


  • Ist das nicht identisch mit meinem Code? Mir ist daher noch immer unklar warum ich diese Fehlermeldung erhalte.
    EDIT: der Tipp mit dem Rückgabetyp fehlte mir...



  • ja, ist quasi identisch.. ausser, dass ich noch einen error check eingebaut habe. und die antwort auf deine eigentliche Frage habe ich beim dritten editieren eingebaut 😉


Anmelden zum Antworten