J'ai surchargé l'opérateur [] dans ma classe. Existe-t-il un moyen plus agréable d'appeler cette fonction à partir de ma classe autre que (*this)[i]
?(* ceci) [i]?
Répondre
add à (size_t i) et utiliser cette fonction
EDIT
si vous en utilisant activement stl éviter inconsistance sémantique: dans std::vector operator[]
ne vérifie pas si l'index est valide , mais à (..) vérifier et pourrait jeter std::out_of_range
exception. Je pense que dans le projet avec plus de stl un comportement similaire sera attendu de votre classe.
Peut-être que ce nom n'est pas le meilleur pour cette fonction.
Je suppose que c'est à peu près ce que je peux faire de mieux, merci. – mpen
Eh bien, vous pouvez utiliser "operator [] (i)".
pas agréable, mais explicite:
this->operator[](i)
Si vous trouvez que vous devez faire beaucoup, créez une fonction A() qui fait exactement ce que l'opérateur [] fait. Vous pouvez alors dire:
this->At(i)
Je ne suis pas sûr que je recommanderais d'ajouter un 'at' qui fait * exactement * la même chose que opérateur[]. Cela part du précédent établi par la norme. –
OK, appelez-le At() –
Je ne recommanderais pas de dupliquer le code (je doute que c'est ce que suggère Neil), mais il n'y aurait rien de mal à avoir l'opérateur []() appeler at() ou At (). –
this->[i]
ne compile même pas. La seule autre option est this->operator[](i)
.
Vous n'avez pas besoin de "this->" devant un appel de méthode. –
Cela pourrait être un compromis raisonnable:
T& me = *this;
// ...
me[i];
Serait bien si C++ avait un type spécial intégré pour * ceci. PHP a "self" mais ce n'est pas tout à fait la même chose. En tout cas, merci pour la suggestion :) – mpen
Selon Stroustup, 'ceci' aurait probablement été une référence, sauf que les références sont arrivées trop tard dans l'évolution du C++. –
Dommage qu'il ne revienne pas et réécrive tout pour être centré sur la référence quand c'est arrivé. Cela aurait été une langue bien meilleure. –
Puisque vous acessing quelque chose à partir de votre propre classe, pourquoi ne pas simplement utiliser une fonction privée, nommée comme bon vous semble:
class MyClass
{
private:
SomeType& Item(int index) { /* return a value */ }
public:
SomeType& operator[](int index) { return Item(index); }
void SomeFunction(void);
}
void myClass::SomeFunction(void)
{
SomeType localVar = Item(42); // internal access
}
int main(int argCount, char ** argList)
{
MyClass myClass;
SomeType x;
x = myClass[42]; // external access
return 0;
}
Cet exemple est un peu exagéré pour votre point, mais merci :) +1 pour l'effort – mpen
Haha vrai. Je ne savais pas où m'arrêter:) –
- 1. permute i et T [i]
- 2. Quoi de plus efficace i ++ ou ++ i?
- 3. Comment refactoriser ceci en J?
- 4. SIC Assembler I/O
- 5. La compréhension d'IE de 'ceci'
- 6. Howto incorporer -I makefile
- 7. Calculer la dérivée ([i] - [i - 1]) dans Ruby
- 8. Pour "ceci" ou non pour "ceci" en C#?
- 9. Comment mapper ceci dans NHibernate
- 10. Que signifie i: nil = "true"?
- 11. Comment modéliser ceci dans OO
- 12. Comment configurer ceci (Moq Setup)
- 13. Comment faire ceci dans Unity?
- 14. Comment obtenir l'index d'un élément sans 'ceci'?
- 15. utilisant rstrip sur form.cleaned_data [i] dans Django
- 16. Agréger une liste <int> en utilisant (i, j) => i + "délimiteur" + j
- 17. comment convertir des chaînes comme "ceci est un exemple" en "ceci est un exemple" sous ruby
- 18. Comment créer une liste multi-dimensionnelle pour ceci en C#?
- 19. Lua I/O injection de dépendance
- 20. Façon bon marché d'améliorer I/O
- 21. Wait active dans Windows I/O pilote
- 22. Container.remove (int i) throws inattendu ArrayIndexOutOfBoundsException
- 23. Contrôle de source sur IBM i (iSeries)
- 24. NHibernate: set id I interface cartographique
- 25. Connectez PHP à IBM i (AS/400)
- 26. Java I/O en utilisant inpout32.dll
- 27. question concernant la sortie NSLog% i,% d
- 28. réseau Java i/o blocage ou non?
- 29. Comment codez-vous ceci: Le menu SO
- 30. Comment modélisez-vous ceci dans django?
Près dupliquer de http://stackoverflow.com/questions/681746/2d-matrix-and-overloading-operator-ugly-syntax – ephemient