Один вариант, который вы могли бы рассмотреть - наследование от std::vector
:
typedef std::vector<whatever> Foo_Vec;
class Foo : public Foo_Vec
{
public:
const Foo_Vec &GetVec() { return (Foo_Vec&)*this; }
};
Я ни в коем случае не говорю, что это лучший подход, поскольку он может привести к проблемам, которые не возникнут при наличии закрытого члена или наследовании от private Foo_Vec
, поскольку public Foo_Vec
предоставляет все методы от std::vector
до Foo
. Более того, std::vector
не имеет виртуального деструктора, поэтому, если вы попытаетесь очистить коллекцию std::vector
с помощью Foo, она не будет полностью очищена. Я просто выбрасываю это туда.
Как показывают другие ответы, вы должны использовать size_t
или size_type
вместо unsigned int
для 64-битной совместимости. В противном случае в будущей 64-разрядной сборке ваш std::vector
может содержать более 2 32 элементов, но значение размера будет усечено, что приведет к ошибкам.