С точки зрения компилятора, константа имеет фиксированное значение во время компиляции. Поскольку вы читаете свои данные из текстового файла (который можно изменить после компиляции программы), числа, которые вы читаете из текстового файла, не могут быть константами в вашей программе.
Сказав это, вы могли бы сделать что-то вроде этого:
class ConstInteger {
public:
ConstInteger(fstream &f) {
char s[5];
f.getline(s,2);
value = atoi(s);
}
public operator int() const { return value; }
private:
int value;
};
fstream convert("data.txt");
ConstInteger n(convert);
Вышеприведенное опирается на инициализацию, которую компилятор C ++ выполняет для глобальных классов. Как следствие этого, вы в значительной степени зависите от компилятора C ++ в отношении порядка инициализации класса. Кроме того, обработка ошибок в этой схеме может быть проблематичной. (Например, что произойдет, если data.txt
не существует?)