Ho alcune costanti che devono essere utilizzate solo in fase di compilazione per semplificare il codice, quindi non ho bisogno delle variabili attuali disponibili in fase di esecuzione.Come definire la costante (statica) di compilazione all'interno di una classe C++?
Tradizionalmente il modo in cui questo è stato fatto era con #define NAME 123
ma vorrei un'alternativa sicura al tipo.
Al di fuori delle classi è possibile const int name = 123;
che funziona bene, ma non sembra possibile inserirlo all'interno di una classe. Per esempio, questo:
class Example {
public:
const double usPerSec = 1000000.0;
};
double usOneMinute = 60 * Tempo::usPerSec;
Opere con Visual C++, ma non funziona con GCC:
error: non-static const member ‘const double Example::usPerSec’,
can’t use default assignment operator
È possibile risolvere il problema, rendendo più statico, ma poi di Visual C++ si lamenta:
error C2864: 'Example::usPerSec' : a static data member with an in-class
initializer must have non-volatile const integral type
type is 'const double'
Suppongo che questo significhi che VC++ accetterà solo static const int
.
Voglio evitare di impostare il valore nel costruttore perché quindi ho bisogno di un'istanza della classe in fase di esecuzione per accedere al valore, mentre in realtà voglio che tutto venga gestito in fase di compilazione come lo è con #define
.
Quindi, come posso definire una costante come double
all'interno di una classe, senza ricorrere a renderla globale o usando #define
, che funzionerà senza avere un'istanza della classe, e che funzionerà con i principali compilatori C++ 03 ?
'+ 1' per aver menzionato' std :: numeric_limits <> ', ritengo che sia un punto utile. – Angew