在Java中,标准是定义方法toString()
返回类的字符串表示形式。除了超载之外operator<<
,C++中有这样的标准吗?我知道有std::to_string()
方法来获取数字的字符串表示形式。 C++ 标准是否谈到定义方法to_string()
为类提供类似的目的,还是 C++ 程序员遵循的常见做法?
做这种事情的标准方法是提供一个插入运算符这样就可以将对象插入到流中——流可以是任何类型的流,例如字符串流。
如果您愿意,您还可以提供一个转换为字符串的方法(对插入运算符有用),并且如果您发现转换可以接受,您可以提供“to string”运算符。
这是我的标准“点”类示例:
template <typename T>
struct point
{
T x;
T y;
point(): x(), y() { }
point( T x, T y ): x(x), y(y) { }
};
template <typename T>
std::ostream& operator << ( std::ostream& outs, const point <T> & p )
{
return outs << "(" << p.x << "," << p.y << ")";
}
我还倾向于保留一个方便的函数来将事物转换为字符串:
template <typename T>
std::string to_string( const T& value )
{
std::ostringstream ss;
ss << value;
return ss.str();
}
现在我可以轻松使用它:
int main()
{
point p (2,-7);
std::cout << "I have a point at " << p << ".\n";
my_fn_which_takes_a_string( to_string(p) );
你会发现Boost Lexical_cast 库 http://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast.html也是为了这种事情而设计的。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)