Est-il possible d'implémenter une fonction pour accéder à un vecteur de données privé foo
dans une classe via class[i][j]
? Cela devrait appeler la fonction interne du vecteur foo[i][j]
.Accès Vecteur dans la classe avec "class [i]" comme classe serait le vecteur
1
A
Répondre
4
Une solution simple consiste à mettre en œuvre operator[]
il "pèle" que la première dimension:
#include <cstdlib>
class MyClass
{
std::vector<std::vector<int> > foo;
public:
// grant write access
std::vector<int>& operator[](size_t index)
{
return foo[index];
}
// grant read access
const std::vector<int>& operator[](size_t index) const
{
return foo[index];
}
};
Vous devez le two overloads en raison de const correctness. (Si vous voulez seulement accorder un accès en lecture, pas en écriture, vous n'avez pas besoin de la version non-const, bien sûr.)
2
Vous pouvez surcharger operator[]
pour cela. Vous voudrez peut-être regarder this faq pour obtenir des conseils pour utiliser operator()
à la place.
+1 bonne réponse et const exactitude. – SingleNegationElimination
Je l'ai essayé, mais j'ai seulement: matrix.cpp: 29: erreur: 'std :: vecteur> & opérateur [] (taille_t)' doit être une fonction membre non statique matrix.cpp : 33: erreur: fonction non membre 'const std :: vecteur > & opérateur [] (taille_t)' ne peut pas avoir le qualificateur cv matrix.cpp: 33: erreur: 'const std: : vector > & operator [] (size_t) 'doit être une fonction membre non statique –
multiholle
@multiholle: le code de Fred est correct - vous devez l'avoir mal intégré. Si vous ne pouvez pas déterminer où votre erreur est, envoyez plus de votre nouveau code ou copiez-collez Fred et travaillez en arrière pour ajouter votre propre fonctionnalité, en vérifiant périodiquement que vous n'avez rien cassé et en économisant si tout est bon ... . –