J'ai deux classes (A & B) avec une structure similaire, qui contiennent toutes deux un vecteur de structures.Accéder au vecteur membre privé de plusieurs objets dans l'autre classe
class A/B{
private: std::vector<DataStruct> vec_A/vec_B;
...
public:
...
}
Pour créer/mettre à jour un objet de B, je dois combiner les données à partir des vecteurs de multiples objets de la classe A (combinant des entrées similaires dans le vecteur dans une entrée dans le vecteur de l'objet B et faire des données transformations en B).
Comment procéder?
Mes pensées étaient:
- Making classe B à un ami de A. Mais j'ai entendu, que des cours de fabrication amis en C++ est seulement le dernier recours et doit être évité.
- Ecriture d'une fonction
getVector()
dans la classe A, qui renvoie une référence au vecteurvec_A
, afin que la classe B puisse fonctionner sur les données. Pour moi, cela semble simplement contourner l'encapsulation des données. Quel serait l'avantage de mettre le vecteur en public? - Ecriture d'une fonction
getVector()
dans la classe A, qui renvoie une copie devec_A
. Mais commevec_A
n'est pas si petit, cela semble être inefficace (ok, seulement quelques Ko. Devrait fonctionner mais en général ...) - Ecrire une fonction pour la classe A, qui fait le calcul et crée un objet de classe B. Puis concaténer plusieurs objets de B dans un objet final de B. Cependant, cela semble être beaucoup de frais généraux pour moi.
avez-vous envisagé de donner à B une référence constante de 'vec_A'? – Xatyrian
@Xatyrian non, mais cela semble être une bonne idée – Jounathaen