我试图设置一些与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
// ...
这使得该语法现在来初始化它有点傻,因为我必须做类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'
就是我想要做的可能,如果是这样,什么权怎么去做呢?