我想在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));
答案 0 :(得分:2)
这是不可能的。 operator=
必须是成员函数,并且您无法将自己的内容添加到unique_ptr
类。
即使有可能,也是一个坏主意,因为:
operator=
unique_ptr
的有效用例的行为
你可能派生自派生类中的unique_ptr
和重载operator=
,但同样会让任何阅读代码的人感到困惑(如果您重新访问该项目,可能会包括您自己)一段时间后。)
正如评论中所建议的那样,最好只做一些命名函数。