簡體   English   中英

班級的獨立名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM