我正在尝试用 Lua 设置一些东西,但是 Lua 的细节对我的问题并不重要。
我想做的是调用一个函数,比如说OpenLib<T>(L)
,让它获取特定类(以及它的表)的表名,并将其注册到 Lua。它基本上归结为:
template <class T>
static void OpenLib(lua_State* L)
{
// this func does some other stuff too that I'm omitting, important bit below
if (T::myTable && T::myTableName)
{
luaL_openlib(L, T::myTableName, T::myTable, 0);
}
}
我已经尝试了几种不同的方法,但我无法让它正常工作。我尝试制作一个包含 myTable 和 myTableName 的基类,如下所示:
class LuaInfo
{
public:
static const char* myTableName;
static luaL_reg* myTable;
}
然后我可以从 LuaInfo 继承,然后填写我需要的信息。这不起作用,因为从 LuaInfo 继承的所有类都会获得相同的信息,所以我环顾四周,产生了这样做的想法:
template <class t>
class LuaInfo
// ...
这使得初始化它的语法有点傻,因为我现在必须做 class Widget : public LuaInfo,但它更接近工作。
template <class T>
void OpenLib(lua_State* L)
{
if (T::myTable && T::myTableName)
{
luaL_openlib(L, LuaInfo<T>::myTableName, LuaInfo<T>::myTable, 0);
}
}
我已经尝试了一些变体来尝试让它正确,但我不断收到类似的错误
undefined reference to `ag::LuaInfo<ag::ui::Widget>::myTable'
我想做的事情是否可能,如果是,那么正确的方法是什么?