Я объявляю класс, которому нужны некоторые публичные константы. Моя идея была объявить так:
class MyClass {
public:
const int kIntConst = 1234;
const float kFloatConst = 1234.567f;
// ...methods...
};
Этот подход прекрасно работает для int
константы, но не работает для float
со следующей ошибкой:
error C2864: 'MyClass::kFloatConst' : only static const integral data members can be initialized within a class
Ну, я делаю понимаю это сообщение об ошибке. Он говорит, что я не могу иметь константу с плавающей точкой (нецелую), объявленную в объявлении класса. Итак, вопрос: ПОЧЕМУ !? Почему это может быть int
, а не float
?
Я знаю, как обойти это. Объявление kFloatConst
в качестве статического константного члена и последующая инициализация в .cpp решает проблему, но это не то, что я хотел бы иметь. Мне нужна константа времени компиляции (та, которая может быть оптимизирована компилятором), а не член класса константы, который нуждается в связывании файла .obj.
Можно использовать макрос, но макрос не имеет пространства имен, и мне не нравятся глобально определенные константы.