我試圖設置一些與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'
就是我想要做的可能,如果是這樣,什麼權怎麼去做呢?