文字列ストリームを渡して、関数に直接書き込むことは可能ですか?
次のような関数が呼び出されたことを覚えています。
my_func(ss << "text" << hex << 33);
文字列ストリームを渡して、関数に直接書き込むことは可能ですか?
次のような関数が呼び出されたことを覚えています。
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 );
一時的に使用したい場合。しかし、それはあまりユーザーフレンドリーではありません。