J'ai une classe dans laquelle je veux exposer une liste de structures (qui ne contiennent que des entiers). Je ne veux pas l'extérieur de modifier ces données, juste au-dessus et itérer les lire Exemple:Rendre ma classe C++ itérable via BOOST_FOREACH
struct TestData
{
int x;
int y;
// other data as well
}
class IterableTest
{
public:
// expose TestData here
};
maintenant dans mon code que je veux utiliser ma classe comme ceci:
IterableTest test;
BOOST_FOREACH(const TestData& data, test.data())
{
// do something with data
}
J'ai déjà lu cet article http://accu.org/index.php/journals/1527 sur les espaces membres. Cependant, je ne veux pas (ou ne peux pas) enregistrer tous TestData dans un vecteur interne ou quelque chose. Cela est dû au fait que la classe elle-même ne possède pas le stockage, c'est-à-dire qu'il n'y a en réalité aucun conteneur sous-jacent auquel la classe peut accéder directement. Cependant, la classe elle-même peut interroger un composant externe pour obtenir l'élément suivant, précédent ou ith. Donc en gros je veux que ma classe se comporte comme si elle avait une collection, mais en fait elle n'en a pas. Des idées?
ne suffit-il pas de fournir des fonctions de début/fin renvoyant des itérateurs appropriés? – jalf
oui, mais je n'ai pas un conteneur sous-jacent qui pourrait me fournir ces itérateurs – newgre
alors écrivez-les vous-même. :) La bibliothèque Boost.Iterator devrait vous permettre de démarrer assez rapidement. – jalf