4

次のようなことができるように、C++ での I/O ストリームの書式設定の効果を範囲制限したいと思います。

std::cout << std::hex << ...
if (some_condition) {
  scoped_iofmt localized(std::cout);

  std::cout << std::oct << ...
}
// outside the block, we're now back to hex

ベース、精度、塗りつぶしなどは、ブロックを離れるときに以前の値に復元されます。

これが私が思いついた最高のものです:

#include <ios>

class scoped_iofmt
{
    std::ios& io_;     // The true stream we shadow
    std::ios  dummy_;  // Dummy stream to hold format information

    public:
    explicit scoped_iofmt(std::ios& io)
                : io_(io), dummy_(0) { dummy_.copyfmt(io_); }
    ~scoped_iofmt() { try { io_.copyfmt(dummy_); } catch (...) {} }
};

...しかし、C++ iostream はかなり厄介な領域であり、上記の安全性/適切性については確信が持てません。それは危険ですか?あなた(またはサードパーティ)はすでにより良い結果を出していますか?

4

1 に答える 1

6

Boost I/O Stream State-saver ライブラリのようなものでしょうか?

于 2009-08-18T21:52:54.563 に答える