Ho una classe che voglio esporre un elenco di strutture (che contengono solo alcuni numeri interi). Non voglio l'esterno per modificare questi dati, basta scorrere su di esso e leggerli Esempio:Rendere la mia classe C++ iterabile tramite BOOST_FOREACH
struct TestData
{
int x;
int y;
// other data as well
}
class IterableTest
{
public:
// expose TestData here
};
ora nel mio codice che voglio usare la mia classe in questo modo:
IterableTest test;
BOOST_FOREACH(const TestData& data, test.data())
{
// do something with data
}
Ho già letto questo articolo http://accu.org/index.php/journals/1527 sugli spazi membri. Tuttavia, non voglio (o non posso) salvare tutti i TestData in un vettore interno o qualcosa del genere. Questo perché la classe stessa non possiede la memoria, cioè non c'è in realtà un contenitore sottostante a cui sia possibile accedere direttamente dalla classe. La classe stessa può interrogare un componente esterno per ottenere l'elemento next, previous o ith, però.
Fondamentalmente voglio che la mia classe si comporti come se avesse una collezione, ma in realtà non ne ha uno. Qualche idea?
non devi solo fornire funzioni di inizio/fine che restituiscono gli iteratori adatti? – jalf
sì, ma non ho un contenitore sottostante che potrebbe fornirmi questi iteratori – newgre
quindi scrivili tu stesso. :) La libreria Boost.Iterator dovrebbe essere subito operativa. – jalf