Alg*_*ous -1 c++ java inheritance interface
我正在尝试用 C++ 创建一个双向链表,并且我正在尝试正确执行它。因此,我认为我应该遵守任何“官方”C++ 指南推荐的任何接口结构,例如接口。在Java中,有这样的接口,可以免费使用,并且标准化抽象数据类型(例如https://docs.oracle.com/javase/8/docs/api/java/util/List.html) 。
我的问题:C++中有类似的东西吗?Startpageing 找到了我这个链接:
https://en.cppreference.com/w/cpp/container/list
但它似乎没有使用任何继承。
小智 5
标准库的设计方式首先是为了避免需要此类继承。
通常,通过在容器类型上进行鸭子类型输入,您可以获得与接口基本相同的行为,而无需任何间接调用的运行时开销:
#include <vector>
#include <list>
#include <iostream>
template<typename Collection>
void do_something(const Collection& data) {
for(const auto& v : data) {
std::cout << v << "\n";
}
}
int main() {
std::vector<int> a;
std::list<int> b;
do_something(a);
do_something(b);
}
Run Code Online (Sandbox Code Playgroud)
如果您从 Java 的角度来处理这个问题,您可以将其视为“类固醇泛型”,其中函数通常可以接受任何看起来像集合的东西。
还有一些其他可能涉及迭代器和范围的方法,但原理保持不变。