C++ 如何检查SWIG接口文件中的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:

我有下面的函数,我只想在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:
            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.<代码>的定义,因此宏将具有其预期的效果。

在代码> %{…%} /代码>内移动预处理器宏。