C++模板协变性

6
你能否在C++中使用通用类型(通过模板)的协方差特性?
我已经找到了这个问题的答案(链接),但是我再次提问是因为已经过去两年了!此外,虽然解释了在C++中的模板中不能有协变性,但没有解释原因!
你能帮我了解这个主题的最新消息/解释吗?

2
你应该添加一个代码示例来说明你所谓的“模板协变”:链接问题的答案仍然适用。 - quantdev
3
如果某个所谓的句子结构不是语言的一部分,那么关于它在语言中不存在的解释有多少可以使你满意?难道“它不存在”不足以说明吗? - Kerrek SB
1
沉迷于编程,或者只是无法满足?嗯... - WhozCraig
实际上,你在链接问题中询问的是“逆变性”,而不是“协变性”。 - Piotr Skotnicki
没有必要解释沉迷。 - Johan Boulé
@kerrek C++语言以努力涵盖许多范式而闻名,因此“不存在”在这个领域完全不令人满意。 - Johan Boulé
1个回答

5

考虑到之前的问题是作为澄清工具,似乎你想知道为什么T<Derived>通常不是从T<Base>派生出来的。

考虑T=std::shared_ptr

您不希望能够执行此操作:

void foo( shared_ptr<Base>& p ) { p.reset( new Derived2 ); }

auto main() -> int
{
    shared_ptr<Derived1> p;
    foo( p );   // Oops, p now points to unrelated Derived2
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接