我正在用 C++ 开发一个服务器应用程序,它提供一个 HTML 页面作为对 HTTP 请求的响应。
问题是,目前,我的网页在我的代码中写成常量字符串,我使用<<
插入其他字符串。运算符和 std::stringstream
,仍在字符串本身的写入过程中。查看示例以使其更清楚:
std::string first("foo");
std::string second("bar");
std::string third("foobar");
std::stringstream ss;
ss << "<html>\n"
"<head>\n"
"<title>Bitches Brew</title>\n"
"</head>\n"
"<body>\n"
"First string: "
<< first << "\n"
"Second string: "
<< second << "\n"
"Third string: "
<< third << "\n"
"</body>\n"
"</html>";
虽然我不能简单地把内容塞进一个文件中,但会发生这种情况,因为与 HTML 结构混合的数据会在执行过程中发生变化。这意味着我不能简单地将整个页面写入一个文件,字符串值为 first
。 , second
, 和 third
,因为这些值会动态变化。
对于第一个请求,我会发送带有 first = "foo";
的页面,而在第二个请求中我有 first = "anything else"
.
此外,我可以简单地返回到 sscanf/sprintf
来自 stdio.h
并插入我想要的文本——我只需要用正确的格式 (%s
) 替换字符串间隙,从文件中读取 HTML 结构,然后插入我想要的任何内容。
我想在没有 C 库函数的情况下在 C++ 中执行此操作,但我不知道使用什么来执行此操作。什么是 C++ 标准解决方案?
最佳答案
除了 (s)printf
本身,标准 C++ 没有直接等同于 (s)printf
的格式。但是,有很多格式库提供此功能,例如 cppformat包含 Python 的 str.format
和安全 printf
的 C++ 实现的库。
也就是说,我建议改用模板引擎,请参阅 C++ HTML template framework, templatizing library, HTML generator library .
或者您总是可以重新发明轮子并通过读取文件并用参数替换一些占位符来编写自己的模板引擎。
关于(s)printf 的 C++ 标准替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14126015/