我想知道Boost.Format是否支持使用固定宽度/预分配的缓冲区作为输出,而不是由lib本身管理的动态缓冲区?是否可以使用预分配缓冲区的Boost.Format?
也就是说,正常情况下你会怎么做:
boost::format myfmt("arg1: %1%/arg2: %2%");
// e.g.:
cout << (myfmt % 3.14 % 42);
// or
string s = boost::str(myfmt % "hey!" % "there!");
所以升压:格式LIB将自动完成分配足够的空间和管理“输出缓冲区”为你的。
我想知道是否有任何方式使用与Boost.Format库一个预定义的非动态缓冲区,也就是这样的:
const size_t buf_sz = 512;
char big_enough[buf_sz];
boost::format myfmt("arg1: %1%/arg2: %2%");
myfmt.attach_buffer(big_enough, buf_sz);
myfmt % "hey!" % "there!"
// big_enough buffer now contains the result string
我知道我可以通过例子只是筛选,该文档和来源,但除了缺乏时间atm。 (以及错过某些东西的可能性)知道以下内容会很有趣: 如果不可能,如果有人能解释为什么(如果存在/具体的是什么) - 这是故意的吗?它不符合API吗? ...?
声明:这个问题是不是关于性能!
你要什么,当你运行的空间会发生什么?对于一个固定的buff,我会使用snprintf,但这就是我:) – nhed
@nhed如果它不合适,库可以/可以抛出一个异常或只是停止填充缓冲区(类似于[选项](http:///www.boost.org/doc/libs/1_47_0/libs/format/doc/format.html#exceptions)已提供) –
我不确定那些例外情况适用于目标缓冲区 – nhed