我希望有某种std::vector
不能超过const int MAX_LENGTH
元素的东西.我理解我无法覆盖std::vector
非虚函数,我需要做的是对所有相关的成员函数进行大小检查(例如assign
,push_back
......有这么多).最明显的方法是std::vector
用一个class
确保不会超出最大长度的操作.但这似乎很笨拙.有没有比封装类更优雅的解决方案来限制std :: vector的大小?
Rei*_*ica 13
你确定矢量本身不能增长,或者只是这种矢量的消费者需要限制参数的大小吗?如果是后者,那么只assert(arg.size() <= MAX_LENGTH)
需要在需要的地方,记录并完成.否则,请继续阅读.
A std::vector
可以有无限大小.如果你限制这个尺寸,那就不再是std::vector
了.因此,std::vector
在不违反Liskov替代原则的情况下,您无法公开获得并限制大小.派生类仍然是一个向量,但不作为一个向量,并且不能用作一个,这样的接口将彻底混淆您的用户,并且编译器将不会捕获随之而来的严重使用错误.这是个坏主意.
您可以做的最好的事情是私有地从向量派生,或者有一个向量作为成员,并在强制执行大小时公开所有向量的接口.这样的矢量不能转换为std::vector
,虽然显然你可以允许它被复制或移动到std::vector
.它仍然会像矢量那样执行,仍然允许通过迭代器等进行访问.
我们谈的是一个非常小的类,它的实现只需遵循标准(或至少是cpp引用),你将所有真正的工作留给私有std::vector
.所以这并不笨重,这是唯一理智的做法.
归档时间: |
|
查看次数: |
1206 次 |
最近记录: |