也许这是一个简单的问题,因为我还是C++的新手。我想使用某种工厂将日志记录封装在我的应用程序中。这个想法是,只有工厂知道哪个具体类将处理函数调用。应用程序将始终调用基本日志记录类的抽象接口(interface)。

工厂方法应如下所示:

std::unique_ptr<AbstractLoggingClass> Factory::getDefaultLogger(const std::string& param){
    return new ConcreteLoggingClass(param);
}
ConcreteLoggingClassAbstractLoggingClass的子类。

但我收到以下错误:
Error: could not convert '(operator new(64ul), (<statement>,
((ConcreteLoggingClass*)<anonymous>)))' from 'ConcreteLoggingClass*'
to 'std::unique_ptr<AbstractLoggingClass>'

我的问题是我不知道如何实例化ConcreteLoggingClass并将unique_ptr返回到AbstractLoggingClass
我已经找到this post,但是仍然看不到解决方案。

最佳答案

您想要的std::unique_ptr构造函数是 explicit ,因此您需要...很好...对此明确。尝试

return std::unique_ptr<AbstractLoggingClass>(new ConcreteLoggingClass(param));

关于c++ - 在工厂中返回unique_ptr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34397430/

10-16 19:07