は私は知りませんが、私は関数は次のようにivoked見た覚え:stringstreamを関数パラメータとして渡すことは可能ですか?私が書いていることは理にかなっている場合
my_func(ss << "text" << hex << 33);
ことは可能ですか?
は私は知りませんが、私は関数は次のようにivoked見た覚え:stringstreamを関数パラメータとして渡すことは可能ですか?私が書いていることは理にかなっている場合
my_func(ss << "text" << hex << 33);
ことは可能ですか?
確かです。それはなぜでしょうか?このような関数の宣言例:
void my_func(std::ostringstream& ss);
私が逃したことをありがとう、それは幾分可能であることは分かっていたが、その効果を達成するためにどの宣言が使用されているのかわからなかった – rsk82
'' ss << "test" << hex << 33'のタイプが'std :: stringstream&'ではなく 'std :: ostream&'であり、それは与えられた署名と一致しません。 –
@James Kanzeもちろん正しいです。 –
絶対に!値渡しではなく、参照渡しを確認してください。
void my_func(ostream& stream) {
stream << "Hello!";
}
はい、それはある、と
Function(expresion)
式が最初に評価されるようになりますし、それの結果は、パラメータ
注意として渡されます:のostreamを返しOperator << for ostreams
my_func
は、次の行に沿って署名を持たなければなりません。
void my_func(std::ostream& s);
です。そのタイプはss << "text" << hex << 33
です。目標は、生成された文字列を抽出し ある場合は、のような何かをする必要がyou'ld:あなたが一時的なストリームを使用できないことにも
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);
:あなたは ような何かを書くことができます。しかし、あまりユーザーフレンドリーではありません。
それを試してみてください。 – aztaroth