我需要将一个指向派生模板类的唯一指针传递给采用唯一基模板类的函数,如下所示:
template <typename T>
class Base {};
template <typename T>
class Derived : public Base<T> {};
template <typename T>
void foo(std::unique_ptr<Base<T>>){}
//or
template <typename T>
class MyClass{
public:
MyClass(std::unique_ptr<Base<T>> arg) : _arg(std::move(arg)) {}
private:
std::unique_ptr<Base<T>> _arg;
};
int main()
{
auto b = make_unique<Derived<int>>();
foo(std::move(b));
MyClass mc(std::move(b))
}
为什么这不起作用以及如何修复它?
我收到错误:
'void foo1<T>(std::unique_ptr<Base<T>,std::default_delete<Base<T>>>)': cannot convert argument 1 from 'std::unique_ptr<Derived<int>,std::default_delete<Derived<int>>>' to 'std::unique_ptr<Base<T>,std::default_delete<Base<T>>>'
但它有效
auto derived = std::make_unique<Derived<int>>();
std::unique_ptr<Base<int>> base = std::move(derived);
最佳答案
在这种情况下,C++ 不会推断出模板参数。您可以指定<int>
,那就会成功。
foo<int>(std::move(b)); // fine
MyClass<int> mc(std::move(b)); // fine
关于c++ - 将 unique_ptr<Derived<T>> 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74457840/