这有效:
stringstream temp;
temp << i;
result_stream << transform(temp.str());
Run Code Online (Sandbox Code Playgroud)
(transform是一个带a string和返回a 的函数string; i是一个int).但是,我尝试让C++ 11创建一个没有名称的临时对象不起作用:
result_stream << transform((stringstream() << i).str());
Run Code Online (Sandbox Code Playgroud)
我认为它会起作用,因为第二个<<应该只返回第一个参数,我可以使用str()它.但我得到这个错误:
error: 'class std::basic_ostream<char>' has no member named 'str'
Run Code Online (Sandbox Code Playgroud)
我正在使用g ++ 4.8.1(MinGW-W64).
有没有办法实现这一点(即使用未命名的临时代码编写这样的代码)?(上面的代码有点简化,实际代码涉及使用<<除int.之外的参数.)
<<临时操作员的结果stringstream是ostream.没有str()方法ostream.
to_string改为使用:
result_stream << transform(std::to_string(i));
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为第二个<<是std::ostream &operator<<(std::ostream &, int);,所以返回类型ostream&没有成员str().
你必须写:
result_stream << transform( static_cast<stringstream &>(stringstream() << i).str() );
Run Code Online (Sandbox Code Playgroud)
operator<<()返回对std::ostream包含在其中的基类的引用std::stringstream.基类不包含该str()方法.您可以将其强制转换为std::stringstream&:
result_stream << transform(static_cast<std::stringstream&>(std::stringstream() << i).str());
Run Code Online (Sandbox Code Playgroud)
试过并且没能为C++ 11做这个(2009年):
http://cplusplus.github.io/LWG/lwg-active.html#1203
无论如何,libc ++都是非法的并且实现了它.
它需要重新考虑,但在2017年之前不可能标准化(标准化是一个冰川过程).