C++中的逆变如何实现的?

发布于 2022-09-11 18:49:55 字数 683 浏览 20 评论 0

在 搜索协变逆变的时候,在博客 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文