c++ - 将 std::ostringstream 转换为 std::stringstream
问题描述
下一个代码在 ss 中返回一个空字符串:
#include <string>
#include <iostream>
#include <sstream>
int main () {
std::ostringstream oss;
oss << "Text";
std::stringstream ss;
ss.basic_ios<char>::rdbuf(oss.rdbuf());
std::cout << ss.str() << "\n";
return 0;
}
如何从ss返回oss中引入的文字?我主要对将 std::ostringstream 转换为 std::stringstream 感兴趣。
解决方案
您可以使用受保护的std::streambuf::swap
成员函数来交换流缓冲区的内容与另一个
要访问它,您需要一个派生类:
#include <iostream>
#include <sstream>
struct swapper : std::streambuf {
using std::streambuf::streambuf;
void swap(std::streambuf& rhs) { // public proxy for protected swap
std::streambuf::swap(rhs);
}
};
// casting
void swapbuf(std::ostream& a, std::ostream& b) {
static_cast<swapper*>(a.rdbuf())->swap(*b.rdbuf());
}
int main () {
std::ostringstream oss;
oss << "Text";
std::stringstream ss;
swapbuf(oss, ss);
std::cout << "ss: " << ss.str() << "\n"; // prints Text
}
推荐阅读
- python - 如何正确地使用 Streams 加速 Cupy?
- c++ - 更改后在构造函数中初始化 const 变量
- go - 无键文字预防如何工作
- r - 哪种文件格式在 sink() 函数中占用的空间更少?
- azure - DataFactory 调试错误 - BadRequest - 工厂被删除
- node.js - 如何为嵌套对象编写招摇文档
- python - 熊猫在分组后计算中位数
- python - 在我的 Django 代码中列出超出范围的错误。当我去下载一个pdf文件时
- css - CSS:背景不显示 iPhone 或 iPad,但适用于 iMac(Safari)
- angularjs - 在 AngularJS 中使用常量作为过滤器参数