Вместо наследования вы можете использовать состав:
// Implementation, in some other file
#include <vector>
class VectorOfNumbers
{
public:
std::vector<int>& container;
VectorOfNumbers(std::vector<int>& in_container)
: container(in_container)
{
}
};
int DoStuff(const VectorOfNumbers& thingies)
{
std::sort(thingies.container.begin(), thingies.container.end());
// ...
}
Недостатком является дополнительное имя переменной при каждом доступе.
Кроме того, вам нужно, чтобы эта реализация находилась взаголовочный файл, включенный в cpps, чтобы они знали, что они могут делать с VectorOfNumbers.
По сути, просто создаем оболочку для вашего вектора.Это похоже на облегченную версию PImpl (мы заботимся только об избежании зависимостей заголовка, поэтому нам не нужна полная развязка указателя).Это позволяет избежать проблем, поднятых Марком Б и Ибунгалобиллом.
Но я не думаю, что это действительно того стоит.