Est-il possible de déclarer un itérateur qui est une variable membre dans une classe et qui peut être incrémentée en utilisant une fonction de membre, même si l'objet de cette classe est const.comment déclarer iterator volatile en C++
Répondre
Ce serait avec le mot-clé « mutable ».
class X
{
public:
bool GetFlag() const
{
m_accessCount++;
return m_flag;
}
private:
bool m_flag;
mutable int m_accessCount;
};
Déclarez-le mutable, non volatil.
Êtes-vous sûr que vous avez besoin iterator en tant que membre? Les itérateurs ont une capacité: ils deviennent invalides. C'est un petit signe d'un problème de conception.
Je veux parcourir une liste en utilisant des fonctions membres. getFirst et getNext genre de .... Mais pour cela, je veux déclarer un itérateur mutable afin que je puisse itérer sur les objets const. –
optez pour le STL-Design des itérateurs. Il est accepté dans la communauté C++ et ne surprendrait pas les autres développeurs. Cela voudrait dire que l'itérateur ne fait pas partie de la classe. –
@tmpforspam: si le comportement de votre objet change lors de l'appel de votre fonction membre, ce n'est pas une fonction const. – xtofl
Got it.
using namespace std;
class tmptest
{
public:
void getNextItr()const
{
m_listItr = m_list.begin();
m_listItr++;
}
list<string> m_list;
mutable list<string>::const_iterator m_listItr;
};
Mutable avec const_iterator
fonctionne. Merci de me rappeler mutable versus volatile. Je suis volatile confondu avec mutable. Merci encore!
Il s'agit d'une rupture de contrat sérieuse: après avoir appelé la fonction 'getNextItr()', le code client supposera que l'objet est toujours le même, mais ce n'est pas le cas. – xtofl
- 1. Iterator personnalisé en C++
- 2. C# volatile double
- 3. En C#, Comment déclarer DWORD en uint32?
- 4. C++ problèmes iterator
- 5. Illustrer l'utilisation du mot-clé volatile en C#
- 6. C++ Container/Iterator Dépendance Problème
- 7. Iterator externe vs Iterator interne
- 8. Comment déclarer un tableau de chaînes en C++?
- 9. Comment déclarer deux variables statiques différentes? (C++)
- 10. Volatile Extreme Programming Team
- 11. Comment déclarer un tableau C de chaînes
- 12. Comment convertir C++ std :: élément de liste Multimap iterator
- 13. Comment déclarer la fonction de modèle en dehors de la déclaration de classe
- 14. Déclarer un objet avant de l'initialiser en C++
- 15. Pouvez-vous déclarer un pointeur comme extern en C++?
- 16. jquery paramètres de la fonction iterator
- 17. Conversion Enumeration à iterator
- 18. déclarer div dans C# avec l'événement onclick
- 19. comment déclarer statique NSString?
- 20. Liste Iterator Remove()
- 21. Comment déclarer un pointeur (octet ^)?
- 22. scala tourner un Iterator [Option [T]] dans un Iterator [T]
- 23. C: Comment déclarer correctement un tableau de chaînes?
- 24. Iterator & Exceptions nommés
- 25. Problèmes conceptuels avec Iterator
- 26. C Déclarer un tableau de char *
- 27. Comment déclarer un délégué de prédicat en ligne?
- 28. Comment déclarer un énumérateur TDictionary?
- 29. Retour d'un Iterator
- 30. Comment déclarer un tableau d'octets 2D
Cela fonctionne pour les entiers, mais si elle est un itérateur à une liste ou une carte cela ne fonctionne pas sur des objets const. Il jette une erreur à iter = list.begin() en disant pas d'opérateur "=" disponible. –
@tmpforspam: Sans être en mesure de voir le message d'erreur complet que vous obtenez, cela ressemble à « liste » est également const et vous devriez utiliser un const_iterator. –