lit*_*net 5 c++ factory-pattern unique-ptr
也许这是一个简单的问题,因为我还是C++的新手.我想使用某种工厂来封装我的应用程序中的日志记录.这个想法是只有工厂知道哪个具体类将处理函数调用.应用程序将始终调用基本日志记录类的抽象接口.
工厂方法应如下所示:
std::unique_ptr<AbstractLoggingClass> Factory::getDefaultLogger(const std::string& param){
return new ConcreteLoggingClass(param);
}
Run Code Online (Sandbox Code Playgroud)
ConcreteLoggingClass是.的子类AbstractLoggingClass.
但是我收到以下错误:
Error: could not convert '(operator new(64ul), (<statement>,
((ConcreteLoggingClass*)<anonymous>)))' from 'ConcreteLoggingClass*'
to 'std::unique_ptr<AbstractLoggingClass>'
Run Code Online (Sandbox Code Playgroud)
我的问题是,我不知道如何实例化ConcreteLoggingClass并返回unique_ptr到AbstractLoggingClass
我已经找到了这篇文章,但我仍然没有看到解决方案.
Fre*_*abe 12
std::unique_ptr你想要的构造函数explicit,因此你需要...好吧......明确它.尝试
return std::unique_ptr<AbstractLoggingClass>(new ConcreteLoggingClass(param));
Run Code Online (Sandbox Code Playgroud)
如果你可以使用C++ 14,你应该使用std::make_unique:
return std::make_unique<ConcreteLoggingClass>( param );
Run Code Online (Sandbox Code Playgroud)
否则明确创建std::unique_ptr:
return std::unique_ptr<AbstractLoggingClass>{ new ConcreteLoggingClass{param}};
Run Code Online (Sandbox Code Playgroud)