首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将std::ostringstream流转换为std::std流

将std::ostringstream流转换为std::std流
EN

Stack Overflow用户
提问于 2020-04-16 13:09:41
回答 2查看 957关注 0票数 1

下一段代码返回ss中的空字符串:

代码语言:javascript
运行
复制
#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::converting流转换为std::std流。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-20 05:12:40

在@NathanOliver的注释之后,我决定使用str()将std::Following流转换为std::str流。

代码语言:javascript
运行
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2020-04-16 14:03:15

您可以使用受保护的std::streambuf::swap成员函数,该函数将流缓冲区的内容与另一个流缓冲区的内容交换。

要获得对它的访问,您需要一个派生类:

代码语言:javascript
运行
复制
#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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61251053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档