Template Übergabe von char*



  • Hallo,

    Ich brauch mal Hilfe bei einem Template. Ich möchte eine Funktion, die mir den Inhalt eines string o.ä. in eine Zahl konvertiert.
    atof usw. macht mir immer ein Kommafehler, der nicht sein soll.

    Das Template:

    template<class t>
        t StringToNumb(const char* sstr) {
            stringstream Str;
            t number;
            Str << sstr;
            Str >> number;
            return number;
        };
    

    Der Aufruf:

    string stmp;
    //...
    
     StringToNumb(stmp.data());
    

    Als Meldung kommt "No matching function for call to 'StringToNumb(const char*)'

    Ich hab jetzt schon diverse andere Datentypen ausprobiert, klappt aber alles nicht. Wie ist das richtig?



  • Hi, probier mal

    int i = StringToNumb<int>(stmp.data());
      float f = StringToNumb<float>(stmp.data());
    

    Hatte ich auch schon mal 😉 ... das muss der template parameter explizit angegeben werden.

    lg, xor



  • abgesehen davon, dass man bei std::string in der Regel nicht .data() verwendet,
    um an den internen char* zu kommen, sonder .c_str()...

    davon abgesehen hat mein vorredner recht:
    wo sich aus den normalen Parametern der Template Parameter nicht herleiten lässt (weil er z.B. nur für den Rückgabewert verwendet wird), muss man ihn explicit angeben.

    also immer StringToNumb<ZielTyp>(blabla) -> Zieltyp muss angegeben werden!


Log in to reply