C++中的逆变如何实现的?
在 搜索协变逆变的时候,在博客 https://www.jianshu.com/p/db7...
template <typename T>
using Sink = std::function<void (T*)>;
Sink<Vehicle> vehicle_sink = [] (Vehicle*) { std::cout << "Got some vehicle\n"; };
Sink<Car> car_sink = vehicle_sink; // OK, vehicle_sink可以代替 car_sink
car_sink(new Car);
vehicle_sink = car_sink; // ERROR
Car是Vehicle的子类,这里car_sink 是一个接受参数类型为 Car 且什么都没有返回的函数, vehicle_sink 是一个接受参数类型为 Vehicle 且什么都没有返回的函数,那为什么这样Sink<Car> car_sink = vehicle_sink就会成立?成立的原因是因为类型转换吧,函数之间的类型转换有什么原则吗?依据接受参数的继承关系来确定函数类型转换原则??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论