Либо используйте boost::lexical_cast<>
:
#include <boost/lexical_cast.hpp>
std::wstring s1(L"123");
int num = boost::lexical_cast<int>(s1);
std::wstring s2(L"123.5");
double d = boost::lexical_cast<double>(s2);
Они вызовут исключение boost::bad_lexical_cast
, если строка не может быть преобразована.
Другая опцияиспользовать Boost Qi (из библиотеки Boost.Spirit):
#include <boost/spirit/include/qi.hpp>
std::wstring s1(L"123");
int num = 0;
if (boost::spirit::qi::parse(s1.begin(), s1.end(), num))
; // conversion successful
std::wstring s2(L"123.5");
double d = 0;
if (boost::spirit::qi::parse(s1.begin(), s1.end(), d))
; // conversion successful
Использование Qi намного быстрее, чем lexical_cast, но увеличит время компиляции.