2

次のように、いくつかのストリーム マニピュレータを ofstream でチェーンしています。

std::string filename = "output.txt";
std::ofstream outputFile;
outputFile.open(filename, std::ios::trunc);
outputFile << std::setw(5) << std::scientific << std::left << variable;

代わりにこのようなことをすることは可能ですか?:

std::string filename = "output.txt";
std::ofstream outputFile;
outputFile.open(filename, std::ios::trunc);
std::ostream m;
m << std::setw(5) << std::scientific << std::left;   // Combine manipulators into a single variable
outputFile << m << variable;
4

2 に答える 2

4

operator <<ストリーム マニピュレータは、ストリームがオーバーロードの 1 つ (リンクの 10-12)を介してそれ自体を呼び出す単なる関数です。そのような関数 (または適切な関数ポインターに変換可能なもの) を宣言するだけです。

constexpr auto m = [](std::ostream &s) -> std::ostream& {
    return s << std::setw(5) << std::scientific << std::left;
};
std::cout << m << 12.3 << '\n';

Wandbox でライブを見る

于 2020-03-06T10:43:55.690 に答える