0

私が理解していることから、C++ テンプレート クラスreference_wrapperは、通常の参照に対するコピー コンストラクターと代入演算子を本質的に提供するため、コンテナーとタプルの参照に役立ちます。つまり、null を許可しないポインターのように思えます。

その理解に基づいて、std::coutデフォルトで文字列を出力するクラスを実装しようとしましたが、ユーザーはそれをファイルでオーバーライドできます。これは、実際のプログラムではおそらく役に立ちません。ここでは例として使用します。最新の C++ での演習として、new/delete の使用を避け、RAII 機能に依存したいと考えました。クラスは次のようになります。

class Printer {
public:
    Printer() : myOut(std::cout)
    {}

    void print(string str)
    {
        myOut.get() << str << endl;
    }

    void setFileOutput(string path)
    {
        fileOutput.reset(new ofstream(path));
        myOut = *fileOutput;
    }

private:
    reference_wrapper<ostream> myOut;
    unique_ptr<ofstream> fileOutput;
};

reference_wrapperすべてが期待どおりに機能しますが、これは私がオンラインで見つけた例とはまったく異なる使用例です。これは の有効な使用と見なされますreference_wrapperか? 自動リソース管理や RAII などの最新の C++ 機能を使用するより良い代替手段はありますか?

4

0 に答える 0