2009-06-05 2 views
0

У меня есть глобальная переменная:Const двойной инициализируется из Lua

const double myvar = 5.1; 

Теперь я превращаю- читать эти значения из Lua.

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

const double myvar = lua_tonumber(L,1); 

Поскольку основной() сначала необходимо выполнить для запуска Lua intepreter и т.д., но если я объявляю MyVar потом, это не будет глобальным.

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

ответ

5

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

0

Вы можете нарушать константность как это:

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

но это -very- плохая практика.

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

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

или даже это:

static double myvar() { 
return 1.15; 
}