【发布时间】:2014-03-14 23:03:27
【问题描述】:
标准库中有很多这样的结构函数:
std::foo(begin(x), end(x), bar);
令我困扰的是,99% 的时间里,争论都是开始和结束。为什么这些函数不都具有肯定会更频繁使用的重载,例如:
std::foo(x, bar);
这是语言或设计限制还是疏忽?谢谢。
【问题讨论】:
-
是什么阻止您自己编写这样的方法?标准库为您提供了通用版本——如果您想要方便重载,请尽情享受。
-
您已经可以使用 Boost.Range 执行此操作,但该标准可能会在不久之后获得实际范围。
-
boost 中已经有很多东西,很多库早就应该在标准中了。其中一些便利是人们使用 Java 和 C# 的原因。因为 .Net 和 Java库已经提供了易于使用的功能..例如,加载图像等等..不需要外部库或编写包装器..是的,是的,他们可以用不同的方式对它们进行模板化,让事情变得简单..但我不要认为任何人都能够告诉你
why,而他们的意见不是标准的答案或借口。C++ 仍然是我最喜欢的语言。 -
无论如何 OP,我能想到的最好的意见和借口是它向后兼容 C 样式数组。对于其中一些函数,您可以将指针传递给数组的开头和结尾.. 而如果它的模板不同,并且访问了 container.begin 和 container.end,C 样式的数组可能无法使用它.. 示例:
std::min(&CArray[0], &CArray[some_size]);
标签: c++ algorithm c++11 iterator range