わたってるしき改行を持つすべての可変長引数を印刷するには、式を折る使用:はC++ 17倍式の古典的な例は、すべての引数を印刷している
template<typename ... Args>
void print(Args ... args)
{
(cout << ... << args);
}
例:
print("Hello", 12, 234.3, complex<float>{12.3f, 32.8f});
出力:
Hello12234.3(12.3,32.8)
出力に改行を追加したいと思います。しかし、私はそれを行うための良い方法を見つけることができない、私がこれまでに見つけた最高:それは各引数のための一時的なostringstream
を構築するよう
template<typename ... Args>
void print(Args ... args)
{
(cout << ... << ((std::ostringstream{} << args << "\n").str()));
}
しかしこれは、ゼロ・オーバーヘッドではありません。
次のバージョンでは、いずれかの動作しません:
(cout << ... << " " << args);
error: expression not permitted as operand of fold expression
そして
(cout << ... << (" " << args));
error: invalid operands to binary expression
最後の2つのバージョンが動作しない理由を私は理解しています。 折り畳み式を使用して、この問題に対するより洗練されたソリューションがありますか?
これまで2つの良い答え、ありがとう!これを行うための「エレガントな」方法はないと思われます。 –