【问题标题】:Argument passing of template class as an interface [duplicate]模板类作为接口的参数传递[重复]
【发布时间】: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&lt;Papa&gt;这里怎么做接口?

【问题讨论】:

  • 这是因为模板不是协变的。见这里:stackoverflow.com/a/2206549/745468。一种解决方案是让您的 myFunction 也成为模板。
  • @SMeznaric 谢谢,模板协方差是我正在寻找的术语。

标签: c++ templates inheritance interface


【解决方案1】:

这似乎类似于这里的这个问题:No Suitable User Defined Conversion 尽管那是使用数字类型。 myFunction 或 myFunction 返回的内容是否需要区分 Child 和 Papa?

【讨论】:

  • 不,它与那个问题不相似。完全不同的问题。
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多