У меня есть класс, которому нужен элемент static const variable. Значение для этого класса будет известно во время выполнения пользователем. Я прочитал много сообщений, но до сих пор ни одно из решений не работает. Я знаю, что этот пост:Лучший способ инициализировать переменную типа "static const" класса в главном
Can I initialize a static const member at run-time in C++?
содержит работу вокруг, но он использует глобальную переменную, который я хотел бы избежать. А также это не решит проблему.
Рассмотрим это:
#include
class A {
friend void foo(int);
static int dummy;
public:
static const int &T;
};
const int &A::T = A::dummy;
int A::dummy = 0;
void foo(int val) { A::dummy = val; }
int main() {
foo(10);
std::cout << A::T << std::endl;
foo(12);
std::cout << A::T << std::endl;
}
Программа будет собирать и записывать 10 и 12 в консоли. Wich поражает цель определителя const. Здесь const является ссылкой, а не значением. Поэтому я пришел к выводу, что во время выполнения невозможно иметь статическую переменную класса const!
Я знаю еще один способ, связанный с созданием класса установочного типа, но он не очень опрятен.
Так что если кто-то знает простое решение, сообщите нам об этом!
предоставьте код, который вы пробовали самостоятельно, и ошибки, которые вы можете получить. на данный момент ваш вопрос очень широк. прочитайте http://stackoverflow.com/help/how-to-ask и http://stackoverflow.com/help/mcve, чтобы задать более интересные вопросы. – davejal
@ davejal. Вы даже прочитали вопрос? Разве это не вопрос кода, который я пытался, или ошибок, которые я получил? Я не чувствую, что мой вопрос широк, это довольно прямо для меня.Но спасибо за нисходящее голосование в любом случае, – Eric
1-й вопрос начинается с наилучшего пути (что приводит к ответам на основе мнения), а не хороший способ начать свой вопрос. Во-вторых, вы просите простое решение (класс, учебник или что-то еще) без предоставления кода, который вы сами пробовали. Извините, но это заслуживает более 1-го вниз. Я просто пытался помочь вам задать лучший вопрос. – davejal