【发布时间】:2021-11-29 17:54:02
【问题描述】:
这是我的场景:
class Container {};
class Papa {};
class Child: public Papa {};
void myFunction(Container<Papa> container);
现在我想将两个不同的参数传递给 myFunction()。
int main()
{
Container<Papa> papaContainer;
Container<Child> childContainer;
myFunction(papaContainer);
myFunction(childContainer); // this line is not working
}
显然我不能这样做。
没有合适的用户定义的从“Container
”到“Container ”的转换
这种情况的解决方案是什么? Container<Papa>这里怎么做接口?
【问题讨论】:
-
这是因为模板不是协变的。见这里:stackoverflow.com/a/2206549/745468。一种解决方案是让您的 myFunction 也成为模板。
-
@SMeznaric 谢谢,模板协方差是我正在寻找的术语。
标签: c++ templates inheritance interface