rsk*_*k82 19 c++ function stringstream parameter-passing
是否可以传入一个字符串流并让函数直接写入?
我记得我看到一个类似于这样的函数被调用:
my_func(ss << "text" << hex << 33);
Run Code Online (Sandbox Code Playgroud)
eq-*_*eq- 20
当然可以.为什么不呢?此类函数的示例声明:
void my_func(std::ostringstream& ss);
Run Code Online (Sandbox Code Playgroud)
绝对!确保通过引用而不是按值传递它.
void my_func(ostream& stream) {
stream << "Hello!";
}
Run Code Online (Sandbox Code Playgroud)
my_func必须有如下签名:
void my_func( std::ostream& s );
Run Code Online (Sandbox Code Playgroud)
,因为这是 的类型ss << "text" << hex << 33。如果目标是提取生成的字符串,您必须执行以下操作:
void
my_func( std::ostream& s )
{
std::string data = dynamic_cast<std::ostringstream&>(s).str();
// ...
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您不能使用临时流;
my_func( std::ostringstream() << "text" << hex << 33 );
Run Code Online (Sandbox Code Playgroud)
无法编译(除非使用 VC++),因为它不是合法的 C++。你可以这样写:
my_func( std::ostringstream().flush() << "text" << hex << 33 );
Run Code Online (Sandbox Code Playgroud)
如果你想使用临时的。但这对用户来说不太友好。
| 归档时间: |
|
| 查看次数: |
18698 次 |
| 最近记录: |