[Solira] C++ e librerie STL
EnneBi
ennebi a solira.org
Dom 6 Apr 2008 13:03:38 CEST
Mi sono ritrovato un programmino scritto un po' di tempo fa e volevo
trovare una soluzione piu' elegante a quella utilizzata ma non capisco
il problema (forse era questo che allora mi ha spinto alla "soluzione"
adotta).
Mi spiego. Il problema puo' tradursi cosi:
c'e' un vettore v1, per esempio di int e voglio selezionare, per
esempio, gli elementi > 10 e metterli in v3. Allora definisco
int prova(int& va){
if(va>10) return va;
else return 0;
};
....
transform(v1.begin(),v1.end(),v3.begin(),prova);
Fin qui tutto Ok. Il problema si pone se voglio parametrizzare il
valore, invece di usare sempre 10.
Io provo a definire una funzione binaria:
int prova2(int& va, int vb){
if(va>vb) return va;
else return 0;
};
....
transform(v1.begin(),v1.end(),v3.begin(),bind2nd(prova2(),10));
ma mi da, nella riga di definizione della funzione:
error: too few arguments to function prova3(int&, int)
Mi sono fatto un giro in Internet, ma trovo sempre i soliti esempi
banali con, per esempio greater fra l'altro usato come io uso prova2. Ho
provato anche a definire prova2 con un template, ma non riesco a cavare
un ragno dal buco.
Nel programmino il problema e' risolto utilizzando prova con il vb
definito come variabile globale. Soluzione forzata che funziona ma non
mi piace: vorrei scrivere una funzione binaria e quindi con bind2nd
passare il parametro.
Qualche suggerimento? Grazie.
--
Nunzio Brugaletta
------------------------
http://ennebi.solira.org
ennebi a solira.org
Maggiori informazioni sulla lista
Solira