Const двойной инициализированный от Lua - PullRequest
0 голосов
/ 05 июня 2009

У меня есть глобальная переменная:

const double myvar = 5.1;

Теперь я конвертирую это, чтобы прочитать эти значения из Lua.

Однако я не могу просто сделать:

const double myvar = lua_tonumber(L,1);

Поскольку функция main () должна сначала выполняться для запуска интерпретатора Lua и т. Д., Но если впоследствии я объявлю myvar, он не будет глобальным.

Есть ли способ достичь глобальной константной переменной, которая берет ее значение из Lua?

Ответы [ 2 ]

5 голосов
/ 06 июня 2009

Тонкие последствия const могут быть полностью поняты только языковыми юристами, но основная идея переменной const заключается в том, что ее значение указывается во время компиляции. Значения Lua нельзя создавать до тех пор, пока не появится интерпретатор Lua, для которого требуется вызов lua_open(), что невозможно сделать до времени выполнения. Так что нет , нет (безопасного, вменяемого) способа иметь переменную const, значение которой определяется Lua.

0 голосов
/ 05 июня 2009

Вы можете нарушить постоянство следующим образом:

*(double*) & myvar = lua_tonumber(L,1);

но это очень плохая практика.

Редактировать : Вместо объявления константных переменных вы можете сделать это:

static double myvar() {
 // todo: check if global L is init
 return lua_tonumber(L,1);
}

или даже это:

static double myvar() {
 return 1.15;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...