[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