2016-10-05 1 views
1

Angenommen, ich habe einen Konstruktor, der einen Vektor vom Typ Zeichenfolge akzeptiert. Wenn eines der Klassenmitglieder kein String, sondern ein Double ist, wie würde ich dann das String-Vektorelement im Konstruktor in Double konvertieren?Konvertieren von Werten in der Konstruktorinitialisierungsliste C++

Foo::Foo(const std::vector<string>& v): 
d(v[0].toDouble()){} 

Ich bin mir bewusst, dass ToDouble() funktioniert nicht in C++ Ich bin nur hier als ein Beispiel setzen, was ich tun möchte.

Danke.

+3

http://en.cppreference.com/w/cpp/string/basic_string/stof –

Antwort

3

Dies ist natürlich nicht die einzige Möglichkeit. Mit std::stod() wäre eine Möglichkeit, aber in dem Fall, dass Sie benötigen einen Konvertierungsfehler zu behandeln, müssen Sie dies in zwei Schritten vor:

Foo::Foo(const std::vector<string>& v) : d(convert(v[0])) 
{ 
} 

Der zweite Schritt dieses convert(), eine private statische Methode wäre:

double Foo::convert(const std::string &s) 
{ 
    std::istringstream i(s); 
    double v; 

    i >> v; 
    if (i.fail()) 
    { 
     // Figure out what to do, here 
    } 
    return v; 
} 

Ihre Hausaufgabe hier wäre, herauszufinden, was zu tun ist, wenn die Konvertierung fehlschlägt, und geeignete Maßnahmen ergreifen.

+0

Ich stehe korrigiert. –

Verwandte Themen