文字列ストリームを渡して、関数に直接書き込むことは可能ですか?
次のような関数が呼び出されたのを見たのを覚えています。
my_func(ss << "text" << hex << 33);
確実なこと。なぜそうではないのですか?このような関数の宣言例:
void my_func(std::ostringstream& ss);
絶対に!値ではなく、参照によって渡すようにしてください。
void my_func(ostream& stream) {
stream << "Hello!";
}
my_func
には、次の行に沿って署名が必要です。
void my_func( std::ostream& s );
、それはss << "text" << hex << 33
のタイプだからです。生成された文字列を抽出することが目標である場合は、次のようなことを行う必要があります。
void
my_func( std::ostream& s )
{
std::string data = dynamic_cast<std::ostringstream&>(s).str();
// ...
}
一時的なストリームは使用できないことにも注意してください。
my_func( std::ostringstream() << "text" << hex << 33 );
正当なC++ではないため、コンパイルされません(VC++を使用する場合を除く)。次のように書くことができます:
my_func( std::ostringstream().flush() << "text" << hex << 33 );
一時的に使用したい場合。しかし、それはあまりユーザーフレンドリーではありません。