在现代C++,你可以说:
std::string ClassName::toString() const
{
return "Position: (" + std::to_string(position.x) + ", "
+ std::to_string(position.y) + ", "
+ std::to_string(position.z) + ")\n";
}
如果您必须使用printf
,仍然可以使用字符串,但必须先调整它的大小。
std::string ClassName::toString() const
{
static const int initial_size = 1024;
std::string s(initial_size);
int ret = std::snprintf(&s[0], s.size(), "Position: (%f, %f, %f)\n", position.x, position.y, position.y);
s.resize(ret);
// handle overflow: print again
if (s.size() > initial_size)
{
std::snprintf(&s[0], s.size(), "Position: (%f, %f, %f)\n", position.x, position.y, position.y);
}
return s;
}
注意&s[0]
给你一个指针指向可变的字符,确实给那些规模s.size()
的一整个阵列的第一个元素。
'地狱就会失去'luv it! :) – 2012-08-09 22:18:41
AHHHHH。不需要toString()。只需为该类定义一个流操作符。然后,您可以使用lexial_cast <>做转换,如果你确实需要一个字符串,但通常是的toString的唯一原因()是打印出来,以便流运营商完美。 – 2012-08-09 23:00:53