J'ai lu le pointeur "this" sur divers sites (par exemple les manuels MSDN) et je comprends ses utilisations de base - renvoyer une copie de votre propre objet ou en utilisant un pointeur de celui-ci pour les retours/comparaison.Utilisation du pointeur "This" en C++
Mais je suis tombé sur cette déclaration:
// Return an object that defines its own operator[] that will access the data.
// The temp object is very trivial and just allows access to the data via
// operator[]
VectorDeque2D_Inner_Set<T> operator[](unsigned int first_index) {
return VectorDeque2D_Inner_Set<T>(*this, first_index);
}
Qu'est-ce que faire? Est-il en quelque sorte incrémenter l'opérateur, et si oui, pourquoi?
(Cela vient d'un exemple m'a donné le débordement de la pile, donc il peut y avoir des erreurs dans la syntaxe. Permettez-moi de savoir si un plus gros morceau est nécessaire, je peux coller plus code.)
EDIT 1
Voici la liste complète, pour plus d'informations. La fonction est proche du bas de la classe. Remarque: j'ai renommé la variable de x en index et renommé la classe interne basée sur un modèle. J'ai oublié de mettre le modèle dans la classe interne du modèle, que j'ai ajouté dans cette mise à jour.
Des idées maintenant?
template <typename T>
class Container
{
private:
// ...
public:
// Proxy object used to provide the second brackets
template <typename T>
class OperatorBracketHelper
{
Container<T> & parent;
size_t firstIndex;
public:
OperatorBracketHelper(Container<T> & Parent, size_t FirstIndex) : parent(Parent), firstIndex(FirstIndex) {}
// This is the method called for the "second brackets"
T & operator[](size_t SecondIndex)
{
// Call the parent GetElement method which will actually retrieve the element
return parent.GetElement(firstIndex, SecondIndex);
}
}
// This is the method called for the "first brackets"
OperatorBracketHelper<T> operator[](size_t FirstIndex)
{
// Return a proxy object that "knows" to which container it has to ask the element
// and which is the first index (specified in this call)
return OperatorBracketHelper<T>(*this, FirstIndex);
}
T & GetElement(size_t FirstIndex, size_t SecondIndex)
{
// Here the actual element retrieval is done
// ...
}
}
Où l'exemple a-t-il été donné, quel est le contexte? –
Bien que le code puisse compiler, il semble que ce soit faux. – ybungalobill
J'ai ajouté la liste complète maintenant. Certes, ce n'était pas du code complet, juste une idée que quelqu'un donnait ici pour étoffer, pour rendre un objet vectoriel/deque enveloppé 2D avec des doubles crochets ("[] []") via un objet interne intermédiaire.Mes excuses pour avoir oublié le typecast dans mon expression originale et pour ne pas avoir mis la liste complète, mais au moins j'avais le sens de demander si c'était nécessaire! :) –