【发布时间】:2018-05-21 15:24:17
【问题描述】:
为简单起见,我将问题简化为简单示例。我有基类:
template<typename T>
class Base {
virtual T getParameter(T&) = 0;
};
以及使用工厂方法返回其对象的派生类:
template<typename T>
class Der : public Base<T> {
public:
static std::unique_ptr<Der> getInstance() {
return std::make_unique<Der<std::string>>();
}
T getParameter(T& param) override {
return param;
}
};
现在我想使用包含接口的 unique_ptr 传递派生类的对象,即:
template<typename T>
void someFun(std::unique_ptr<Base<T>>&& ptr) {
//do sth with ptr
}
通过调用:
someFun(Der<std::string>::getInstance());
错误:
test.cpp:26:44: error: no matching function for call to ‘someFun(std::unique_ptr<Der<std::__cxx11::basic_string<char> >, std::default_delete<Der<std::__cxx11::basic_string<char> > > >)’
someFun(Der<std::string>::getInstance());
^
test.cpp:21:6: note: candidate: template<class T> void someFun(std::unique_ptr<Base<T> >&&)
void someFun(std::unique_ptr<Base<T>>&& ptr) {
^~~~~~~
test.cpp:21:6: note: template argument deduction/substitution failed:
test.cpp:26:44: note: mismatched types ‘Base<T>’ and ‘Der<std::__cxx11::basic_string<char> >’
someFun(Der<std::string>::getInstance());
【问题讨论】:
标签: c++ c++14 unique-ptr