介绍一个Rust中的核心概念Trait,以及它和C++中的继承有何不同,各有什么优劣。
原本希望在一篇文章中说清楚这些概念,不过随着本文的撰写,发现内容比较多,所以将会分成2~3篇文章,本文是其中的第一篇。
在本文中,将会包含以下内容:
- 从C++中讲述继承和多态的经典例子Bird继承自Animal入手
- 再通过鸵鸟的例子发现这种继承关系的局限性
- 再引入蝙蝠的例子发现上述改进方案的局限性
- 再通过C++ 20的concepts特性来解决这些问题
- 最后再对比Rust中,实现相同功能的例子
后续更深入的例子和分析,将会在后续的文章中进一步阐述。
继承
在每本C++的教材中,都会用下面这个经典的例子
class Animal {
protected:
Animal(const std::string& name)
: name_(name)
{}
public:
virtual ~Animal() {}
public:
virtual void eat() {
std::cout