Newsgroup: it.comp.lang.c++
Titolo: (era domanda azzardatissima, parte seconda)


class Confronto {
    public:
        Confronto( T n): number(n) {}
        bool operator () ( /*const*/ Type &Type_Class ) /*const*/ {
  // Qui uso il puntatore a membro funzione
  // che ho passato
         return (Type_Class.*Member)() == number;
        }
    private:
     T number;
};
class A {
public:
 A(int i, short s) : ia(i), sb(s) {}
 int get_n() /*const*/ {
  return get_intA();
 }
    int get_intA() /*const*/ {
  return ia;
 }
    short get_shortA() /*const*/ {
  return sb;
 }
private:
    int ia;
    short sb;
};
int main(int argc, char* argv[]) {
    std::list<A> la;
 for(int temp=0; temp < 10; temp++)
  la.push_back(A((temp*100000),temp));
    std::list < A >::iterator i = la.begin();
    int prova = 300000;
    i = std::find_if(la.begin(), la.end(),
 // Qui sfrutto il default: il confronto viene fatto
 // con get_n
 Confronto<A,int>( prova ) );
    std::cout << "i->get_intA() = "
    << i->get_intA()
    << "\ti->get_shortA() = "
    << i->get_shortA()
    << '\n';
    short s = 2;
    i = find_if(la.begin(), la.end(),
 // Qui specifico quale funzione membro voglio usare
 Confronto<A,short,&A::get_shortA>( s ));
    std::cout << "\ni->get_intA() = "
    << i->get_intA()
    << " i->get_shortA() = "
    << i->get_shortA()
    << '\n';
    std::cin.get();
    return 0;
}
--
Bruno


Non ne sono certo, ma sembra un problema di VC++: compilato col gcc,
infatti,
tutto funziona (anche togliendo i commenti dai const)
Ciao,
Alberto Griggio

 (anche togliendo i commenti dai const)
Azz... meno male... 8-PPPP
Luc.

 Grazie ancora a Nicola :)
Temo che Alberto abbia ragione: io l'ho scritto col BCB 5 e penso che
anche gcc 2.95 sia in grado di compilarlo: alla faccia di chi vanta la
compatibilita' del VC++...
Ciao,
Nicola

template < class Type, typename T,
già che stiamo discutendo da alcuni giorni sullo stile di
programmazione: non mi sembra una bella cosa mischiare class e
typename, non credete?
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 typename, non credete?
Per essere sincero non sono cosi' aggiornato da darlo per certo ma credo che
anche in questo caso siano equivalenti (in questo contesto, ovviamente).
Per un sacco di tempo ho usato solo class. Poi ho scoperto typeneme e, pur
tendendo ad usare class, ho cominciato a usarlo quando non sono strasicuro che
il tipo attuale debba essere una classe. Cioe' quando accetto per esempio tipi
"puntatore" o altre cose.
Credo che come sempre sia una questione di filosofia.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 "puntatore" o altre cose.
Sta emergendo una convenzione in base alla quale si usa typename per
indicare un parametro che puo' essere qualsiasi tipo, mentre si usa
class per indicare che e' richiesta una classe.
Ciao,
Nicola

 class per indicare che e' richiesta una classe.
Quindi intuitivamente stavo facendo la stessa cosa che stanno facendo gli altri.
Non sapevo fosse una pratica gia' diffusa. Ma evidentemente, davanti
all'equivalenza formale, la "semantica mentale aggiunta" dalla keyword e' la
stessa per me come per molti altri.


class per indicare che e' richiesta una classe.
ok, grazie per l'info.
