c++ - 如何编写接受 std::vector 或 std::list 的函数?

标签 c++ list vector std base-class

我想这个问题有点简单。

vector 和列表都有 push 和 pop 函数,而且 - 更重要的是 - 可以迭代:

for ( auto value : items )
    ...

然而,std::vector 和 std::list 似乎并不共享一个基类。因此,问题是:我如何编写一个函数来接受其中一个(或者,实际上,任何其他适合实现的东西)?

std::list<int> a;
std::vector<int> b;
DoSomething(a);
DoSomething(b);

我想在不重载的情况下进行。如果使用模板,它们不应该导致疯狂的错误消息。比如下面的代码——

int a;
DoSomething(a);

-- 应该会导致调用站点出现编译错误,不在模板内的某处!

有人有什么想法吗?

最佳答案

C++ 标准化委员会试图将概念引入 C++0x(现为 C++11)以解决您在此处提出的问题。他们被迫在文章后期将其撤回,因此我们将不得不等到标准的 future 版本。

Boost 的 BCCL提供可移植临时解决方案。我从未使用过该库,因此我无法保证或反对它。

关于c++ - 如何编写接受 std::vector 或 std::list 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17355500/

相关文章:

java - 如何在android中使用intent传递数组列表

c - C 中函数指针如何工作

c++ - 为什么我不能在c++中 `+1`的迭代器中使用 `map`?

c++ - 复制构造函数

c++ - shrink_to_fit() 与交换技巧

c++ - std::chrono::system_clock 和 duration<double>

java - 支柱2 : Displays table of Songs - null gets printed

java - List 对象是否通过引用传递?

r - 当它实际上是一个因素时,是否有更快的方法来重新编码字符数据?

c++ - 在 C++ 类中使用虚拟方法的性能成本是多少?