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'
私がやりたいことは可能ですか?もしそうなら、それを行う正しい方法は何ですか?