0

我正在使用以下代码在 SDL 屏幕中打印:

SDL_GL_RenderText(  timer, font, color, &position);
sprintf(timer," Time : %d",time);

由于我在 C++ 上进行项目,并且sprintfC 样式函数也是如此,所以我不应该使用 sprintf,我正在尝试使用ostringstream,但我不确定如何使用它。

有人发布等效的 c++ 样式(使用 ostringstream 或等效)。

4

1 回答 1

2

您可以在任何文档或示例中找到的代码示例..

#include <sstream>

std::ostringstream str;
str << "Time: " << time;

// get the std::string
str.str();
// get the C char*
str.str().c_str();

// reset the string stream
str.str("Initial value");

所以如果你想使用 C char 数组

const char* text = str.str().c_str();
SDL_GL_RenderText(text, font, color, &position);

std::strbuf实现此目的的另一种方法是使用自定义and包装对 SDL_GL_RenderText 的调用std::ostream,这将允许执行以下操作:

gl_out << font << color << position << "Timer :" << time << std::flush;

根据字体,颜色和位置有一个真实的类型,而不是像 void* 或简单的 int。如果是这种情况,您可以使用自定义类型包装它们。

这种方法有点复杂,需要对标准 C++ 库中的流管理有很好的理解,但它比 IMO 优雅得多。虽然我从未在 OpenGL 上尝试过,但它可以与 syslog(具有日志级别规范)和其他文本输出媒体一起使用。

于 2013-03-05T16:21:22.350 回答