luxorl
21-06-2009, 16:59
Ciao a tutti,
ho il mio bell'oggetto file_fs creato con una classe
class file_fs{ ... }
In un'altra classe mi sono costruito una lista di questi oggetti
list<file_fs> archivio;
Ora dovrei implementare un metodo che dato un determinato file_fs lo cerca nella lista e lo cancella.
Avevo pensato a qualcosa del genere:
void repository::unregister_file(file_fs x)
{
if(archivio.empty()){
sys_warn("Archivio Vuoto");
return;
}
list<file_fs>::iterator it;
for(it=archivio.begin(); it != archivio.end(); it++){
file_fs y = it.????;
if(y.equals(x)) it = archivio.erase(it);
}
}
Però con cosa mi prendo il valore a cui punta it?
NB: equals(file_fs x) è un metodo che mi sono implementato io nella classe file_fs ed è il seguente:
bool file_fs::equals(file_fs x)
{
string nf = x.get_file_name();
string ip = x.get_fs_ip();
int port = x.get_fs_port();
if((nome_file.compare(nf) == 0) && (fs_ip.compare(ip) == 0) && (fs_port == port)) return true;
else return false;
}
In pratica fa il confronto attributo per attributo dell'oggetto e ritorna true solo se tutti sono uguali.
E se volessi usare il metodo remove() di <list> che rimuove dalla lista un oggetto con un determinato valore?
In Java avrei dovuto implementare Comparable e ridefinire il metodo compareTo()... qui come si fa?
ho il mio bell'oggetto file_fs creato con una classe
class file_fs{ ... }
In un'altra classe mi sono costruito una lista di questi oggetti
list<file_fs> archivio;
Ora dovrei implementare un metodo che dato un determinato file_fs lo cerca nella lista e lo cancella.
Avevo pensato a qualcosa del genere:
void repository::unregister_file(file_fs x)
{
if(archivio.empty()){
sys_warn("Archivio Vuoto");
return;
}
list<file_fs>::iterator it;
for(it=archivio.begin(); it != archivio.end(); it++){
file_fs y = it.????;
if(y.equals(x)) it = archivio.erase(it);
}
}
Però con cosa mi prendo il valore a cui punta it?
NB: equals(file_fs x) è un metodo che mi sono implementato io nella classe file_fs ed è il seguente:
bool file_fs::equals(file_fs x)
{
string nf = x.get_file_name();
string ip = x.get_fs_ip();
int port = x.get_fs_port();
if((nome_file.compare(nf) == 0) && (fs_ip.compare(ip) == 0) && (fs_port == port)) return true;
else return false;
}
In pratica fa il confronto attributo per attributo dell'oggetto e ritorna true solo se tutti sono uguali.
E se volessi usare il metodo remove() di <list> che rimuove dalla lista un oggetto con un determinato valore?
In Java avrei dovuto implementare Comparable e ridefinire il metodo compareTo()... qui come si fa?