过载unique_ptr运算符调用make_unique

时间:2016-04-29 10:24:49

标签: c++

我想在std :: unique_ptr中添加一个运算符,这样我就可以添加make_unique而无需在代码中添加make_unique

我希望能够做到这样的事情

namespace Window
{
    class CWindow;

    typedef std::unique_ptr<CWindow> Window;

    template<typename... Args>
    Window::operator=(Args&&... args)
    {
        return std::make_unique<CWindow>(std::forward<Args>(args)...);
    }
}

//global
Window::Window MainWindow;

//In WinMain
MainWindow = Window::CWindow("Window Name", Vector2D(10, 10), Vector2D(500, 500));

1 个答案:

答案 0 :(得分:2)

这是不可能的。 operator=必须是成员函数,并且您无法将自己的内容添加到unique_ptr类。

即使有可能,也是一个坏主意,因为:

  • 它会破坏operator=
  • unique_ptr的有效用例的行为
  • 阅读代码的人不会期待这种意外行为

可能派生自派生类中的unique_ptr和重载operator=,但同样会让任何阅读代码的人感到困惑(如果您重新访问该项目,可能会包括您自己)一段时间后。)

正如评论中所建议的那样,最好只做一些命名函数。