指定std :: to_string()的补充?

时间:2011-12-13 15:50:40

标签: c++ c++11

在C ++ 11中,由于有一个标准的std::to_string(),我为枚举类和其他实现有意义的小数据类重载了这个函数。

我的问题是,您实施什么作为std::to_string()的补充?

某种from_string()(std中不存在)或者是否在整个类中实现了更合适的标准界面?

4 个答案:

答案 0 :(得分:6)

标准使用使用旧C中使用的简洁命名方案,所以你有

std::string to_string( int value );

你有

int std::stoi(std::string);

见这里

http://en.cppreference.com/w/cpp/string/basic_string/stol

所以你可能会在哪里。

std::string to_string(my_enum);
你可能有

my_enum stomy_enum(std::string)

虽然我会对此感到啰嗦

my_enum string_to_my_enum(std::string)

或只是使用流

std::stringstream ss(my_str);
if(ss >> emun_) //conversion worked

定义流操作符还允许使用boost中的词法强制转换;

enum_ = boost::lexical_cast<my_enum>(my_str);

答案 1 :(得分:0)

对于算术类型,C ++ 11有stoistolstod等。

答案 2 :(得分:0)

如果你的类型是一个类,那么以字符串作为参数的构造函数对我来说就更有意义了。

答案 3 :(得分:0)

C ++ 11标准库只有stoi等。据我所知,这是为了这个。但是,如果你可以使用boost(我称之为c ++的准标准库),你可以使用boost::lexical_cast。要实现这一点,您只需为您自己的类分别为operator>>operator<<)定义流运算符std::istream std::ostream(用于转换为字符串)。

当不使用boost时,我仍然会使用流操作符,所以要从字符串中获取int,我会执行以下操作:

std::string s = ...;
int i;
std::stringstream stream(s);
stream>>i;

当然,您可以将其添加到更通用的功能中,这将为您提供类似于boost::lexical_cast的功能。