У меня проблема с инкапсуляцией вектора. Это с кодом до C ++ 11.
У меня есть класс, назовем его A, в котором в качестве переменной-члена есть вектор объектов. Я не хочу давать прямой доступ к вектору клиентам класса А. Однако в качестве первого удара я раскрыл вектор.
class A
{
public:
struct ConnectionEntry
{
int portNumber;
...
}
std::vector<ConnectionEntry> m_connectionList;
private:
}
В моем коде есть части, где мне нужно создавать векторы класс А и перебрать все из них. Когда мне нужно получить доступ ко всем элементам m_connectionList
, я получаю уродливый код.
vector<A> vecOfA;
for (vector<A>::iterator it = vecOfA.begin; it != vecOfA.end(); it++)
{
for (vector<A::ConnectionEntry>::iterator conn = it->m_connectionList.begin();
conn != it->m_connectionList.end();
conn++)
{
}
}
Мне не нравится, что у меня выставлен вектор. Я думал о реализации operator[]
и size()
для класса A и пересылке значений из m_connectionList, но мне это не кажется чистым.
Существует ли стандартный способ решения этой проблемы? Инкапсуляция вектора и раскрытие только определенных частей без необходимости повторной реализации всех стандартных функций вектора.