Ho creato un oggetto che agisce in qualche modo come infinito per lunghi int. In particolare:Definizione di un oggetto che si comporta come un numero intero infinito
#ifndef MU_INF_H
#define MU_INF_H
#include "mu.h"
namespace mu {
class Inf {
public:
bool operator> (long int i) { return true; }
bool operator> (Inf i) { return false; }
... lots of other boolean operators ...
Inf& operator+ (long int i) { return *this; }
Inf& operator+ (Inf i) { return *this; }
... lots of other integer operators ...
}; // class Inf
} // namespace mu
#endif
E tutto questo funziona piuttosto bene, che mi permette di eseguire unit test del modulo:
mu::Inf inf;
long int n = -1;
long int z = 0;
long int p = 1;
ASSERT((inf + inf) == inf);
ASSERT((inf + n) == inf);
ASSERT((inf + z) == inf);
ASSERT((inf + p) == inf);
ASSERT((inf > inf) == false);
ASSERT((inf > n) == true);
ASSERT((inf > z) == true);
ASSERT((inf > p) == true);
A rischio di rendere impossibile assegnare un segno di spunta, ho tre domande:
- Il C++ fornisce già qualcosa del genere e/o esiste un modo migliore di quello che sto facendo qui?
- Desidero rendere disponibile un'istanza Inf all'interno del mio sistema. Non posso dichiararlo un
static const
perché non è un oggetto "semplice". Qual è l'approccio giusto: globale? modello singleton? - C'è un modo per gestire gli operatori simmetrici in cui il primo int arriva per primo, ovvero
ASSERT((1 + inf) == inf)
? (Non sarò troppo triste se non c'è.)
cosa intendi? Non è un oggetto "semplice"? –
Potresti ricevere assistenza migliore su codereview.stackexchange se il tuo codice funziona e desideri consigli su come migliorarlo. – ApproachingDarknessFish
@BryanChen: Intendo dire che non posso fare 'const const Inf = kInfinity = new Inf()' o qualcosa di simile per renderlo una costante statica. –