PDA

Visualizza la versione completa : [C++] Template e tipo di parametro istanziato


folal
21-02-2011, 16:26
Salve,
ho una domanda sui template di c++, relativamente ad una funzione che mi trovo a gestire:

template<class TPRic, class T>
bool confronta(TPRic& a, T& b, T& c){

if(a=='1' || a=='3') return (b<= c);
if(a=='2' || a=='4') return (b>= c);
else return false;
}

Come faccio a sapere che tipo a run-time il parametro "tipoRicerca"?
Infatti se un char, va bene l'if che c', me se un int come faccio a saperlo?
Esiste un modo + pulito per impostare la funzione, usando i template?

Grazie.

MItaly
21-02-2011, 16:30
tipoRicerca non parametro template, come pu cambiare tipo? :confused: E in ogni caso mi pare il modo sbagliato di impostare una funzione del genere, in un caso del genere probabilmente avresti un parametro bool che dice se fare un confronto in termini di maggiore o minore.
---EDIT---
Forse intendevi


template<class TPRic, class T>
bool confronta(TPRic& tipoRicerca, T& primoElemento, T& secondoElemento){

if(tipoRicerca=='1' || tipoRicerca=='3') return (primoElemento <= secondoElemento);
if(tipoRicerca=='2' || tipoRicerca=='4') return (primoElemento >= secondoElemento);
else return false;
}
?

folal
21-02-2011, 16:33
Chiedo scusa, ho corretto il codice! :mem:

folal
21-02-2011, 16:35
Si probabilmente il modo sbagliato di impostare la funzione!
Chiedo un consiglio, per impostarla correttamente! :smack:

lolide
21-02-2011, 17:23
Perch fai TPRic come parametro template ?
Se un int, un int, non serve farlo come parametro template.

Un modo per recuperare il tipo a runtime non c'. I template sono come un modello di funzione, e viene usato per comporre la funzione dei vari tipi in compilazione, non a runtime.

Per fare quello che vuoi fare tu, se potessi programmare ad oggetti, potresti sfruttare il polimorfismo.
Alltrimenti devi fare la comparazione senza sapere il tipo (comunque puoi comparare 2 char, un char ed un int ecc...)

folal
21-02-2011, 17:53
Capito.

Grazie. :ciauz:

Loading