gpt4 book ai didi

c++ - 缠绕式类型转换

转载 作者:行者123 更新时间:2023-11-28 01:42:38 26 4
gpt4 key购买 nike

谁能帮我理解为什么这段代码可以编译:

class A {};

class B : public A {};

void foo( A ) {}


int main() {
B b;

foo( b );
}

但这不是:

class A {};

class B : public A {};

template< typename T >
class wrapper {};

void foo( wrapper<A> ) {}

int main() {
wrapper<B> b;

foo( b );
}

第二个代码(即未编译的代码)的唯一区别是类 AB 被作为模板参数包装在类 包装器;令人惊讶的是,包装似乎阻碍了从 BA 的转换。

如果有人能帮我修复第二个代码,那就太好了。

最佳答案

class B源自 class A , 所以每个 B 一个A并且可以代替它使用。然而,wrapper<A>wrapper<B>没有关系- 为什么会这样?

考虑这个例子:如果 B 是 A 的儿子,那么 B 的妻子会不会是 A 妻子的儿子(显然不是 - 他们没有亲属关系)。

要完成这样的关系,您需要导出 wrapper<B>来自 wrapper<A> ,这对于 wrapper<> 是不可能的作为模板类。考虑其他方法,您发送 B进入 wrapper<A> 的方法类或类似的(有效,因为它 A )。

关于c++ - 缠绕式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46554788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com