Я понимаю, что ваш вопрос касается инкапсуляции, так как следует понимать, что внутренняя структура является держателем данных, и внешний класс должен каким-то образом управлять этим.
Слабые стороны вашего дизайна
В вашем дизайне Mystruct
публично. Таким образом, все, что находится вне Someclass
, может получить доступ к данным, но также и изменить их. Это подвержено ошибкам, так как нет гарантии, что внешний код не нарушает некоторый инвариант структуры.
Пути улучшения
Самым чистым было бы, конечно, сделать несколько методов получения и установки для доступа к данным. Но с 30 участниками, это много кода.
Если ваш процесс построения инициализирует данные struture, вторым подходом может быть ограничение внешнего доступа только для чтения. Вы бы сделали это, сделав Mystruct
закрытым и предложив функцию, возвращающую константную ссылку:
class Someclass {
Somestruct Mystruct;
public:
...
const Somestruct& get() { return Mystruct; }
};
std::cout << A.get().a << " " << A.get().b << std::endl;
Демоверсия
Тем не менее, прежде чем идти в этом направлении, я бы проверил, нельзя ли инкапсулировать доступ к необработанным данным структуры, например, предоставляя функции, которые управляют данными без необходимости знать внутренние компоненты:
class Somestruct {
...
public:
ostream& show_simplified_specs(ostream& os) {
os << a << " " << b;
}
}
Третий подход может заключаться в использовании шаблона проектирования строителя для инкапсуляции процесса построения Someclass
на основе Somestruct
и других частей.
Указатели?
По возможности следует избегать указателей. Например, предположим, что у вас есть вектор Someclass
для хранения всех этих классов в памяти. В данный момент вы получаете указатель на элемент Mystruct
. Предположим, что вы добавите новый элемент в вектор: все предыдущие указатели могут стать недействительными.
Этот же риск потенциально может существовать со ссылками. Но я думаю, что, хотя это обычная идиома для кэширования указателя, возвращаемого функцией, на практике менее распространенным и привлекательным является копирование ссылки, возвращаемой функцией.