【发布时间】:2023-03-29 10:54:01
【问题描述】:
我想找出流格式化操作在不从堆中分配内存的情况下会产生的字符数。在 C 中,可以使用
int nchars = snprintf(NULL, 0, format_string, args...);
如何在C++的ostream框架内完成?
std::ostringstream 的实现可以从堆中分配内存:
template <class T>
int find_nchar(const T& value) {
std::ostringstream os; // may allocate memory from the heap
os << value;
return os.str().size(); // may allocate memory from the heap
}
我想我需要制作一个自定义的 ostream 类来实现这一点。自定义 ostream 应该尊重可以为普通 std::ostream 设置的所有格式标志。
我正在寻找只使用 C++ 标准库的解决方案,例如,不使用 boost::iostreams。
【问题讨论】:
-
也许能用stackoverflow.com/q/8243743/560648构建一些东西
-
我觉得你的结局想法是对的。
-
关于你的工程,你可以看看 Boost.Interprocess'
bufferstream,它是固定大小的stringstream等价物。 -
@LightnessRacesinOrbit 谢谢你的评论,我现在澄清我正在寻找一个没有外部依赖的解决方案。
-
您只想流式传输一个值吗?