【发布时间】:2012-07-07 05:25:26
【问题描述】:
如果我正在创建一个需要填充缓冲区的方法(例如,fread 的包装器),并且在某些 情况下(在运行时确定)它可以做出很好的猜测在所需的缓冲区大小下,我应该将什么传递给此方法以利用这个机会,同时仍然允许任何合理类型的缓冲区并且不需要用户多次调用?
我喜欢使用
insert_iterator,但我不能告诉它保留一定数量的内存。另一方面,如果我将 container 作为模板参数传递,我会遇到麻烦,因为容器没有标准接口! (例如
vector和string有reserve,但deque和list没有。或者容器可能没有push_back- 我不相信我已经看到这是强制性的。等等)
那么在这样的情况下应该怎么做呢?
【问题讨论】:
-
如果你打算支持
stack,insert_iterator将不起作用。而string也有push_back,insert_iterator不会调用,但back_inserter会调用。insert_iterator调用insert,与push_back一样,vector和string都支持,但stack不支持。 -
@BenjaminLindley:哦,嗯,有趣的一点。所以你认为我应该只引用容器并调用
reserve和push_back,而不使用迭代器? (我可能会忽略stack...嗯) -
在这一点上,我对你应该做什么的看法并不可靠。我还在考虑。我只是指出,您对标准接口(如果您想包含堆栈)的需求不满足您的要点中的两个选项。
-
@BenjaminLindley:啊,我明白了。让我稍微编辑一下这个问题......我认为
stack过于严格。 -
为什么不让调用者选择性地提供一个 lambda 来调用给定对象和大小?