C++ 如何检查SWIG接口文件中的Lua版本?
我有下面的函数,我只想在Lua版本等于或小于C++ 如何检查SWIG接口文件中的Lua版本?,c++,lua,c-preprocessor,swig,C++,Lua,C Preprocessor,Swig,我有下面的函数,我只想在Lua版本等于或小于5.1时使用 因此,我在myBindings.I文件中编写了如下内容: /* used to backport lua_len to Lua 5.1 */ #if LUA_VERSION_NUM <= 501 %{ static void lua_len(lua_State *L, int i) { switch (lua_type(L, i)) { case LUA_TSTRING:
5.1
时使用
因此,我在myBindings.I
文件中编写了如下内容:
/* used to backport lua_len to Lua 5.1 */
#if LUA_VERSION_NUM <= 501
%{
static void lua_len(lua_State *L, int i)
{
switch (lua_type(L, i))
{
case LUA_TSTRING:
lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
break;
case LUA_TTABLE:
if (!luaL_callmeta(L, i, "__len"))
lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
break;
case LUA_TUSERDATA:
if (luaL_callmeta(L, i, "__len"))
break;
default:
luaL_error(L, "attempt to get length of a %s value",
lua_typename(L, lua_type(L, i)));
}
}
%}
#endif
/*用于将lua_len后传到lua 5.1*/
#如果LUA\u版本\u NUMTL;DR:您必须将预处理器宏移动到文本块%{…%}
中
在这种情况下
#if CONDITION
%{
...
%}
#endif
条件由SWIG评估。SWIG不知道宏LUA_VERSION_NUM
,因为它是一个先验接口不可知(即,您也可以生成一个Python接口,其中LUA_VERSION_NUM
没有任何意义)
在变体中
%{
#if CONDITION
...
#endif
%}
SWIG将把文本块内的所有内容转发到接口文件。这将在SWIG不进行任何进一步检查的情况下发生,因此预处理器宏将不会受到影响。C++编译器将包含<代码> <代码>,并找到“代码> LuaYVRealOnNo.<代码>的定义,因此宏将具有其预期的效果。在代码> %{…%} /代码>内移动预处理器宏。