- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试试下面的代码:
ostringstream oss;
streambuf *psbuf, *backup;
backup = oss.rdbuf();
psbuf = cout.rdbuf();
oss.rdbuf(psbuf);
oss << things << endl;
oss.rdbuf(backup);
但不幸的是我得到了这个错误:
error: too many arguments to function call, expected 0, have 1
oss.rdbuf(backup);
但是 rdbuf 有两个重载:
get (1) basic_streambuf<char_type,traits_type>* rdbuf() const;
set (2) basic_streambuf<char_type,traits_type>* rdbuf (basic_streambuf<char_type,traits_type>* sb);
是的,我知道它说 basic_streambuf
但它真的只是一个 typedef typedef basic_streambuf<char> streambuf;
,所以它应该工作。为什么它不起作用?
最佳答案
即使 std::ostringstream
从 std::basic_ios
继承了 rdbuf
,由于 的事实,重载将不可访问>std::basic_ostream
还定义了自己的名为 rdbuf
的成员函数,有效地隐藏了您正在寻找的重载。
您可以通过将 std::ostringstream
实例转换为 std::ostream
引用来访问成员函数,如下例所示:
std::ostringstream oss;
std::ostream& oss_ref = oss;
auto prev = oss_ref.rdbuf (std::cout.rdbuf ());
oss << "hello world"; // will print to the buffer of std::cout
oss_ref.rdbuf (prev); // reset
static_cast<std::ostream&> (oss).rdbuf (...) // equivalent
为什么 std::basic_ostringstream
定义自己的 rdbuf
?
通常 rdbuf
返回一个 std::basic_streambuf*
但是 std::ostringstream
使用一个 std::basic_stringbuf
.
由于不能根据返回类型重载,因此决定有效地隐藏前一个重载以支持新的重载。
通过返回一个 std::basic_stringbuf
,很容易看出 std::ostringstream
在内部使用了一个 stringbuf,它还提供了更简单的方法访问 std::basic_stringbuf
的 str
函数(std::basic_streambuf
中不存在的函数)。
关于c++ - 是否可以更改 ostringstream rdbuf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22243248/
我需要将数据从一些 std::ostringstream 写入另一个 std::ostringstream。当然,我可以使用str()函数 std::ostringstream in; std::os
任何人都可以建议一种方法来拥有一个null std::ostringstream这避免了对传递给它的参数做任何工作 ::not_eof(c); } }; // ... nullbuf
不使用科学计数法将double转换为string,建议的方法是 std::ostringstream strStream; strStream << std::fixed; strStream <<
ostringstream ss; ss #include #include #include #include class stackbuf : public std::strea
在我的 C++ 项目中,我试图这样做: std::ostringstream stream(std::ostringstream::out); 但是我得到一个错误: error C2027: use
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: Why copying stringstream is not allowed? how copy fro
我有一个奇怪的问题,即使我向它插入输出,ostringstream 还是空的。这是我的代码: //logger.h #include #include #include using std::s
所以我在夏天写了一个 ArrayList 的实现,我有一个 toString 方法,在该方法中我使用 ostringstream 对象来添加字符串,然后输出它们。 方法如下: template std
我的代码有一些问题,因为它输出了两个不同的结果。 代码: void output(int x){ for( int i = 0; i s(result.c_str(), result.c_str()
我有以下代码: int n=2; ostringstream convert; // stream used for the conversion convert (std::ostringstr
我的程序在创建 ostringstream 类的对象时总是崩溃。我无法理解导致它崩溃的原因? 程序: #include #include #include DDF foo::send(const
我试图想出一种聪明的方法来将各种东西连接到一个函数的单个字符串参数中,而不必显式使用 ostringstream。我想到了: #define OSS(...) \ dynamic_cast(std
最近我在使用 C++ 代码时遇到了一个非常奇怪的问题。我在极简主义的例子中重现了这个案例。我们有一个 Egg 类: class Egg { private: const char* name;
在 C++ 中(在带有 gcc 的 Linux 上)我想将字节数组 ( vector ) 放入 ostringstream 中或 string . 我知道我可以使用 sprintf但它似乎不是使用 c
我一直在处理其他人的代码,并注意到在 ostringsteam 的所有使用中,他们习惯于显式附加 std::ends。 这是我从来没有做过的事情,也从来没有遇到过问题。 它似乎没有,但是 std::e
我使用 std::ostringstream用于格式化字符串,它继承了它的 string {ostringstream stream; stream string {
在 MSVC 2005 上,我有以下代码。 std::ostringstream stream("initial string "); stream << 5; std::cout << stream
我正在尝试 this answer 中提供的优雅解决方案但无论我尝试什么,我都无法通过此行的错误 Implicit instantiation of undefined template: std::
我想清除并重用一个 ostringstream(和底层缓冲区),这样我的应用就不必进行那么多分配。如何将对象重置为其初始状态? 最佳答案 我过去使用过 clear 和 str 的序列: // clea
在以下情况下获得不同的输出 std::string temp, temp1 = "foo", temp2 = "bar"; std::vector test; std::ostring
我是一名优秀的程序员,十分优秀!