2014-09-03 82 views
5

您可以在C++中使用泛型类型(通过模板)的协方差吗?C++模板协方差

我已经找到了回答我的问题的this question,但是我已经问了两年了!尽管有人解释说在模板中C++中不存在协变性,但没有关于这个的解释!

你能帮我了解这个话题的新闻/解释吗?

+2

您应该添加代码示例为你所说的“模板协”:链接的问题的答案仍然适用 – quantdev 2014-09-03 19:09:43

+3

如果一些自称建设不是语言的一部分,那么“解释”能让你满意吗?是不是“它不存在”够了? – 2014-09-03 19:11:34

+1

“In addiction ...”的错字,还是只是无法获得足够的编码?嗯... – WhozCraig 2014-09-03 19:19:54

回答

4

鉴于前面提到的问题作为澄清设备,似乎你在问为什么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 
}