Mam kilka stałych, które muszą być używane tylko w czasie kompilacji, aby uprościć kod, więc nie potrzebuję rzeczywistych zmiennych dostępnych w czasie wykonywania.Jak zdefiniować stałą czasu kompilacji (statyczną) wewnątrz klasy C++?
Tradycyjnie sposób, w jaki to zrobiono, był z #define NAME 123
, ale chciałbym mieć opcję bezpieczną dla typu.
Poza zajęciami można const int name = 123;
co działa dobrze, ale nie wydaje się możliwe umieszczenie tego wewnątrz klasy. Na przykład w ten sposób:
class Example {
public:
const double usPerSec = 1000000.0;
};
double usOneMinute = 60 * Tempo::usPerSec;
Works z Visual C++, ale nie działa z GCC:
error: non-static const member ‘const double Example::usPerSec’,
can’t use default assignment operator
można naprawić go przez co statyczne, ale potem Visual C++ narzeka:
error C2864: 'Example::usPerSec' : a static data member with an in-class
initializer must have non-volatile const integral type
type is 'const double'
Zgaduję, że oznacza to, że VC++ zaakceptuje tylko static const int
.
Nie chcę ustawiać wartości w konstruktorze, ponieważ potrzebuję instancji klasy w środowisku wykonawczym, aby uzyskać dostęp do wartości, podczas gdy naprawdę chcę, aby wszystko było obsługiwane w czasie kompilacji, tak jak to jest z #define
.
Jak więc zdefiniować stałą jako double
w klasie, bez uciekania się do uczynienia jej globalną lub przy użyciu #define
, która będzie działała bez instancji klasy, i która będzie działać z głównymi kompilatorami C++ 03 ?
'+ 1' dla wzmianki o' std :: numeric_limits <> ', uważam, że jest to przydatny punkt. – Angew