[英]C++ std::stringstream/ostringstream and UTF characters
[英]Convert std::ostringstream into 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
成员 function 将 stream 缓冲区的内容与另一个缓冲区的内容交换
要访问它,您需要派生的 class:
#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
}
根据@NathanOliver的评论,我决定使用str()将std::ostringstream转换为std::stringstream :
#include <string>
#include <iostream>
#include <sstream>
int main () {
std::ostringstream oss;
oss << "Text";
std::stringstream ss;
ss << oss.str();
std::cout << ss.str() << "\n";
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.