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

我想这个问题有点简单.

向量和列表都有推送和弹出功能,更重要的是 – 可以迭代:

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)来解决您在这里提出的问题.他们被迫在这件作品的后期退出,所以我们必须等到标准的未来版本.

Boost的BCCL提供便携式临时解决方案.我从来没有使用过这个库,所以我不能保证或反对它.

点赞