PDA

Visualizza la versione completa : [C++] Definire una funzione scegliendo con lo switch


ProxWeb
27-02-2012, 17:12
Ciao a tutti. Ho un programma che ha la possibilità di eseguire 3 algoritmi differenti, ma vorrei scrivere il codice utilizzando un solo switch. Quello che vorrei fare è una cosa del genere:



switch (S) {
case 1: //BOX
alg(a, b, n, dx)=box(a, b, n, dx);
break;
case 2:
alg(a, b, n, dx)=trap(a, b, n, dx);
break;
default:
cout << "Nessun Algoritmo Associato";
break;


E avere poi il codice generico con la funzione alg(a,b,n,h) piuttosto che un altro switch.

Quando compilo (g++ su OSX) l'errore è:

"error: lvalue required as left operand of assignment"

Premetto che non ho la più pallida idea se ciò sia possibile o meno, però mi farebbe molto comodo. Qualcuno può darmi una mano? Grazie

premoli
27-02-2012, 17:31
Ciao!!!

Non so se ho capito bene quello che vuoi fare...

Ma li stai cercando di assegnare una funzione ad un'altra funzione ??? :confused:
perché se è così ricevere "error: lvalue required as left operand of assignment" è la cosa più naturale del mondo...

Comunque se ho capito bene quello che vuoi fare potresti risolvere creando un vettore di puntatori a funzione...

ProxWeb
27-02-2012, 17:40
mi rendo conto che la mia spiegazione è poco chiara, ma non so come esprimermi meglio :D cmq si, quello che vorrei fare è avere un codice in cui compare una funzione generica "alg" con relativi argomenti e a seconda del valore assunto dallo switch sostituire ad "alg" le funzioni "box" o "trap".

ho cercato l'errore in rete, però non riesco a capirne esattamente il significato.

col vettore di puntatori a funzione intendi un vettore che ha come componenti varie funzioni e assegno il numero della componente alla variabile di switch?

scusa per la "scarsezza" :P

oregon
27-02-2012, 17:56
Ma scrivere semplicemente



switch (S) {
case 1: //BOX
box(a, b, n, dx);
break;
case 2:
trap(a, b, n, dx);
break;
default:
cout << "Nessun Algoritmo Associato";
break;


non andava bene?

ESSE-EFFE
27-02-2012, 18:02
Originariamente inviato da ProxWeb
E avere poi il codice generico con la funzione alg(a,b,n,h) piuttosto che un altro switch.

Se ho capito bene, questa è una situazione tipica che puoi risolvere applicando il polimorfismo. Switch solo in fase di costruzione (factory) e poi chiamata al metodo della classe base.

ProxWeb
27-02-2012, 18:02
sarebbe andato bene se non avessi dovuto utilizzare le funzioni più di una volta :) cmq ho risolto così: definisco una funzione




var alg(var a, var b, int &n, var &h, int S){

switch (S) {
case 1:
box(a, b, n, h);
break;
default:
break;
}



e la metto come funzione generica ;)

oregon
27-02-2012, 18:06
Oppure usi un puntatore a funzione ...

Loading