这有效:
stringstream temp;
temp << i;
result_stream << transform(temp.str());
(transform
是一个接受astring
并返回a的函数string
;i
is int
)。但是,我尝试让C ++ 11创建一个没有名称的临时对象没有用:
result_stream << transform((stringstream() << i).str());
我认为它会起作用,因为第二个<<
应该只返回第一个参数,并且我可以在上面使用str()
它。但是我得到这个错误:
error: 'class std::basic_ostream<char>' has no member named 'str'
我正在使用g ++ 4.8.1(MinGW-W64)。
有没有办法做到这一点(即使用一个未命名的临时代码编写这样的代码)?(上面的代码做了一些简化,实际代码涉及使用以外的<<
on参数int
。)
这不起作用,因为第二个<<
是std::ostream &operator<<(std::ostream &, int);
,所以返回类型是ostream&
没有成员的str()
。
您将必须编写:
result_stream << transform( static_cast<stringstream &>(stringstream() << i).str() );
更新(2019):根据LWG 1203,该标准可能会在将来更改(并且已经有一个主要实现),因此该代码不再有效,而是使用更简单的代码。有关详细信息,请参见此问题。
在过渡时期,显然,以下内容适用于新旧项目:
result_stream << transform( static_cast<stringstream &>(stringstream().flush() << i).str() );
// ^^^^^^^^
这应该不是一个性能损失,因为冲洗空流没有影响?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句