2012-05-03 4 views
5

Come è possibile memorizzare un operatore aritmetico di base in una variabile?Memorizzazione di operatori aritmetici di base in variabili

Mi piacerebbe fare qualcosa di simile in C++:

int a = 1; 
int b = 2; 
operator op = +; 
int c = a op b; 
if (c == 3) // do something 

Dal momento che sto considerando solo +, -, * e / ho potuto conservare l'operatore in una string e basta usare un interruttore dichiarazione. Comunque mi chiedo se c'è un modo migliore/più semplice.

+4

Cerca in che modo le funzioni STL richiedono i predicati. Puoi usare cose come 'std :: plus'. – chris

+3

"enum" è un'opzione? Cosa specificamente è sbagliato con le stringhe / – sarnold

risposta

9
int a = 1; 
int b = 2; 
std::function<int(int, int)> op = std::plus<int>(); 
int c = op(a, b); 
if (c == 3) // do something 

Sostituire std::plus<> con std::minus<>, std::multiplies<>, std::divides<>, ecc, come necessario. Tutti questi si trovano nell'intestazione functional, quindi assicurati di avere in anticipo #include <functional>.

Sostituire std::function<> con boost::function<> se non si sta utilizzando un compilatore recente.