25

文字列ストリームを渡して、関数に直接書き込むことは可能ですか?

次のような関数が呼び出されたことを覚えています。

my_func(ss << "text" << hex << 33);
4

4 に答える 4

23

確実なこと。なぜそうではないでしょうか?そのような関数の宣言例:

void my_func(std::ostringstream& ss);
于 2012-05-31T12:03:02.840 に答える
11

絶対!値ではなく参照で渡すようにしてください。

void my_func(ostream& stream) {
    stream << "Hello!";
}
于 2012-05-31T12:03:16.507 に答える
5

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 );

一時的に使用したい場合。しかし、それはあまりユーザーフレンドリーではありません。

于 2012-05-31T14:39:21.527 に答える
1

はい、そうです、そして

Function(expresion)

最初に評価される式を作成し、その結果をパラメーターとして渡します

注: ostreamの演算子<<はostreamを返します

于 2012-05-31T12:04:10.027 に答える