Vector,Size_type和Encapsulation

dim*_*mba 4 c++ encapsulation stl

我有一个类具有私有数据成员的类vector< A*>.

该类有两个实际使用的公共方法vector<A*>::size_type:

  1. 返回向量中元素数量的方法
  2. 方法通过索引返回向量中的元素

我可以在类的公共部分添加以下typedef:

typedef vector :: size_type SIZE_t;

但恕我直言,它暴露了太多关于类实现的细节.

另一种方法是使用size_t.

你怎么看?

Dav*_*eas 6

我会在类中使用typedef.原因是,对于std::vector,大小类型是std::size_t,但如果您稍后更改代码以使用其大小类型未std::size_t重新定义的容器(手动滚动),则typedef就足够了.

使用该typedef不会暴露任何实现细节,实际上它有助于封装.typedef中的重要元素是本地名称,而不是它定义的名称.

for ( mytype::size_type i = 0; i < myelement.size(); ++i )
Run Code Online (Sandbox Code Playgroud)

在上面的for循环中,用户代码不知道size_type是有符号还是无符号类型,它只是起作用.您可以更改您的实现,只要您更新typedef,之前的代码将编译而没有签名/未签名的比较警告.typedef实际上有助于封装.