【发布时间】:2017-10-03 23:15:14
【问题描述】:
谁能帮我理解为什么这段代码会编译:
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 );
}
第二个代码(即不编译的代码)的唯一区别是A 和B 类被包装为wrapper 类中的模板参数;令人惊讶的是,包装似乎阻碍了从B 到A 的转换。
如果有人可以帮助我修复第二个代码,那也很棒。
【问题讨论】:
-
包装器 和包装器 是两种完全不相关的类型
-
wrapper<A>和wrapper<B>没有直接继承关系。 -
不管怎样,为了不那么琐碎的例子,你的第一个版本将展示object slicing和will not act polymorphically
标签: c++ templates inheritance casting