Мне было интересно, можно ли определить определение, которое изменяет значения в какой-то момент кода в условном выражении. В основном что-то вроде этого:Условие препроцессора
//////////////////////////////////////////// SomeFile.cpp
#define SHUTDOWN false
while(window->isOpen())
{
if(SHUTDOWN)
window->close();
// Rest of the main loop
}
//////////////////////////////////////////// SomeOtherFile.cpp
if(Escape.isPressed())
{
#undef SHUTDOWN
#define SHUTDOWN true
}
Таким образом, приложение закрывается. Если это не так, что имея такую функцию
RenderWindow* getWindow()
{
return window;
}
и затем вызвать
if(Escape.isPressed())
getWindow()->close();
Лучший способ сделать это? Я бы предпочел не идти по этому маршруту, потому что классы, вызывающие ключевое событие, являются членами класса, управляющего основным циклом и окном, поэтому мне нужно будет установить указатели на содержащий класс в меньших классах, чтобы вызвать getWindow (), и это просто похоже на более сложный метод. Но если я не могу это сделать с помощью директив препроцессора, я просто должен использовать указатели для родительского класса.
Почему использование 'define' в конце концов (вместо обычной переменной)? Это директива препроцессора, она выполняется только один раз во время компиляции и НЕ во время выполнения. –
Вы полностью неправильно поняли инструкции препроцессора. Они оцениваются во время компиляции. –
Где бы нормальная переменная была так, чтобы я мог получить к ней доступ из сферы действия этих классов? Классы, вызывающие событие, на самом деле даже не знают о существовании родителей. Фактически, когда они создаются, они входят в вектор внутри класса, который является членом общего класса. – Mike