[英]Independent name of a class
我們有班lua。
在lua類中,有一個方法registerFunc()定義為:
void lua::registerFun() {
lua_register( luaState, "asd", luaApi::asd);
lua_register( luaState, "zxc", luaApi::zxc);
}
lua_register是lua庫中的內置函數: http ://pgl.yoyo.org/luai/i/lua_register
它使用luaApi類的靜態方法作為第三個參數。
現在,某些程序員希望使用lua類,因此他被迫使用靜態方法的定義來創建自己的類,例如:
class luaApi {
public:
static int asd();
static int zxc();
};
現在才是重點。 我不希望(以程序員的身份)創建完全命名為“ luaApi”的類,但例如要創建myClassForLuaApi。 但目前尚不可能,因為它是在代碼中明確編寫的-在lua類中:
lua_register( luaState, "asd", luaApi::asd);
我將不得不將其更改為:
lua_register( luaState, "asd", myClassForLuaApi::asd);
但是我不想(假設程序員那里沒有訪問權限)。
如果仍然無法理解,我放棄。 :)
謝謝。
只要它具有正確的簽名( int (*)(lua_State *L)
aka lua_CFunction
),您就應該能夠將任何方法作為lua_register()
的第三個參數傳遞。 它不必是類的靜態成員,也可以是任何獨立函數:
lua_register(luaState, "myFunction", &myFunction);
如果您不滿意,則應添加一些較大的代碼片段,例如lua
類。 如何將新的調用實例添加到lua_register()
? 您是否正在使用一些預定義的宏? 您是否不允許在lua
類中修改代碼? 除非您使用一些預處理器定義或宏來“彎曲”您的名字,否則您將無能為力。
編輯:如果您希望lua
類的用戶能夠注冊他們自己的函數,那么您應該只允許他們將其作為參數傳遞給方法(本質上也是Lua這樣做的方式):
void lua::registerFunction(const char *name, lua_CFunction *call) {
lua_register(luaState, name, call);
}
如果您想抽象出Lua的狀態對象,也可以考慮使用您自己的包裝器和自定義對象(具有lua
對象以及所有參數和處理返回值)來調用用戶函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.