使用下一个定义与类模板
class A {};
class B : public A {};
void f(A* a) {}
调用f(new B)
隐式转换是可能的,因为B*
隐式转换为A*
,对不对?
但是,当像std::vector
这样的类模板执行此操作时,会生成编译错误。
void f(std::vector<A*> v)
{}
int main()
{
std::vector<B*> v;
f(v); //error! "no suitable user-defined conversion..."
return 0;
}
这是为什么?
'std :: vector '和'std :: vector '是完全不同的类型,但'B'是从'A'驱动的。 – Rabbid76
有没有解决方法? – Pilpel