![]() |
1
2
在C++中,类似于其他OO语言,子类型通常用继承来表示。 但是,我们不能通过继承来建模协方差和反方差关系,因为没有办法列出一个类的基类(没有任何不同的反射建议,这些建议还没有进入到语言中)。 允许这种行为的最简单方法是允许协变和逆变模板类根据相关类型的关系进行转换。 协方差
通常,解决办法是
反差
这里的技巧是一样的-允许任何
然而这有一个主要缺点:您需要手动实现转换,并注意意外 object slicing 可能会破坏您转换回的能力(例如,如果您定义协变容器类型,这将导致严重的头痛)。
本质上,在反射允许我们自动处理这种继承关系之前,转换是实现这一点的唯一方法,我不建议在任何复杂的情况下使用它。一旦你存储了你的
这是一个 Godbolt 链接以显示其工作状态 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |