【发布时间】:2021-02-04 16:08:30
【问题描述】:
我不明白为什么在下面的代码中,shared_ptr<Derived<int>> 没有隐式转换为 shared_ptr<Base<int>>:
#include <memory>
template <typename T>
class Base {
};
template <typename T>
class Derived : public Base<T> {
};
template <typename T>
T foo(std::shared_ptr<Base<T>>) {
return T{};
}
void main() {
foo(std::make_shared<Base<int>>());
foo(std::make_shared<Derived<int>>());
}
我遇到了convert std::shared_ptr<Derived> to const shared_ptr<Base>&,这似乎与我有关。我是否因为制作了函数模板而出错?
我得到的错误是:
E0304 没有函数模板“foo”的实例与参数列表匹配
C2664 'std::shared_ptr
> foo (std::shared_ptr >)':无法从 'std::shared_ptr >' 转换参数 1到 'std::shared_ptr >'
【问题讨论】:
-
您能否创建一个minimal reproducible example 并将其包含在您的问题中?编译它并包含它产生的确切错误消息。
-
@Eljay 虽然它是隐式可转换的。
-
@UlrichEckhardt 我不确定你还想要什么,我发布了整个代码以及我从编译器收到的唯一错误消息
-
@user 由于其他原因,此代码不可编译。这不是最小的可重现示例。
-
@user 在引用包含
<...>对的内容时,您需要使用&lt;,因此它们不会与HTML 标记混淆。我已经为您编辑了错误消息,因此<可以正确显示。
标签: c++ templates inheritance shared-ptr