我想这个问题有点简单.
向量和列表都有推送和弹出功能,更重要的是 – 可以迭代:
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提供便携式临时解决方案.我从来没有使用过这个库,所以我不能保证或反对它.