如何使std :: vector类型安全

Por*_*Man 5 c++ stl

我有一个名为IndexSet的对象,当前定义为std :: vector,我想将其定义为单独的类型.

我希望能够与它进行交互,就好像它是一个向量,但我也想要类型保护,这样当我想使用IndexSet时,我不会意外地使用"普通"向量.

我已经能够提出三种选择,如何做到这一点,没有一个让我高兴.我希望有一个我失踪的第四个.

选项#1:typdef

typdef vector<int> IndexSet
Run Code Online (Sandbox Code Playgroud)

这允许我完全像我的向量一样使用IndexSet,但它给了我零类型保护.我能够将一个向量传递给一个期望一个没有投诉的IndexSet的函数.

选项#2:公共包装类

class IndexSet
{
public:
  vector<int> indexes;
};
Run Code Online (Sandbox Code Playgroud)

这将给我类型保护,但它要求我使用与它交互的间接级别.而不是说set.push_back(1); 我不得不说set.indexes.push_back(1);

选项#3:私有包装类

class IndexSet
{
public:
  push_back....
  operator[]...
  etc...
private:
  vector<int> indexes
};
Run Code Online (Sandbox Code Playgroud)

这将给我两种类型保护,并允许我直接与IndexSet交互,就好像它是一个向量,但只有我首先为我想要与我的IndexSet一起使用的每个std :: vector方法创建包装器方法.

当然,我真正想要做的是创建一个继承自vector的新类,但它没有自己的实现,但我知道标准库容器不喜欢继承.

我还缺少其他选择吗?

Mar*_*k B 0

这听起来像是一份工作BOOST_STRONG_TYPEDEF...... http://www.boost.org/doc/libs/1_54_0/boost/serialization/strong_typedef.hpp

BOOST_STRONG_TYPEDEF(std::vector<int>, IndexSet)