这是一个很好用的reference_wrapper?

时间:2016-03-23 16:54:26

标签: c++ c++11 reference reference-wrapper

据我所知,C ++模板类reference_wrapper对容器和元组中的引用很有用,因为它实际上为普通引用提供了一个copy-constructor和赋值运算符。换句话说,它似乎就像一个不允许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的有效用途吗?是否有更好的替代方案使用现代C ++功能,如自动资源管理和RAII?

0 个答案:

没有答案