現代の 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]
変更可能な char へのポインター、そして実際には size の配列全体の最初の要素へのポインターを提供することに注意してくださいs.size()
。