在C ++ 11中,由于有一个标准的std::to_string(),我为枚举类和其他实现有意义的小数据类重载了这个函数。
我的问题是,您实施什么作为std::to_string()
的补充?
某种from_string()
(std中不存在)或者是否在整个类中实现了更合适的标准界面?
答案 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有stoi
,stol
,stod
等。
答案 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
的功能。