c – 如何在编译时或代码初始化时自动更新数组中的条目?
发布时间:2020-12-16 07:02:53 所属栏目:百科 来源:网络整理
导读:好吧,我有一个抽象的虚拟机(“ PAWN”),它从我的代码运行,脚本可以执行函数,这些函数从C代码注册到脚本,由我的C代码执行. c代码必须以形式提供数组 { "name_i_want_the_function_to_have_in_the_script",function_in_my_cpp_code } 如果函数不在数组中,则无
好吧,我有一个抽象的虚拟机(“
PAWN”),它从我的代码运行,脚本可以执行函数,这些函数从C代码注册到脚本,由我的C代码执行.
c代码必须以形式提供数组 { "name_i_want_the_function_to_have_in_the_script",function_in_my_cpp_code } 如果函数不在数组中,则无法执行. (因为它不存在“) 所以这就把我们带到了这个: 我的函数看起来像这样: //Pawn Functions #define PWNFUNC(a) static cell AMX_NATIVE_CALL a(AMX *amx,cell *params) namespace PawnFunc { PWNFUNC(GGV) { return pGameInterface->FindGameVersion(); } };//namespace PawnFunc 带有脚本函数信息的数组在另一个文件中,如下所示: AMX_NATIVE_INFO custom_Natives[] = { { "GetGameVersion",PawnFunc::GGV },{ 0,0 } }; 现在的问题是: 是否有可能使该阵列自动更新? (在编译时或编译初始化时间之前) 至于现在我必须手动添加每个功能.这有时很烦人,更容易出错. 我想改变它,所以我可以这样做: //Pawn Functions #define PWNFUNC(a,b) ...?... namespace PawnFunc { PWNFUNC(GGV,GetGameVersion)//{ "GetGameVersion",PawnFunc::GGV },is now added to "custom_Natives" array { return pGameInterface->FindGameVersion(); } };//namespace PawnFunc 这有可能吗?如果是的话,我怎么能做到这一点? 也许有可能循环命名空间? 编辑:这里有一些伪代码:http://ideone.com/btG2lx 还有一个注意事项:我可以在运行时执行此操作,但必须在DLLMain完成(我的程序是DLL). 解决方法
如果您使用std :: vector作为脚本信息的存储空间,那么#define将完成这项工作.
(请注意,该标准保证您仍然可以从& custom_Natives [0]获得C风格的数组) std::vector<AMX_NATIVE_INFO> custom_Natives; #define PWNFUNC(NAME,FUNC) struct IMPL_ ## FUNC { IMPL_ ## FUNC() { AMX_NATIVE_INFO entry = { NAME,PawnFunc::FUNC }; custom_Natives.push_back( entry ); } } INSTANCE_ ## FUNC; static cell AMX_NATIVE_CALL FUNC(AMX *amx,cell *params) 现在这样的代码将定义函数并将脚本条目添加到custom_Natives. PWNFUNC("GetGameVersion",GGV) { return pGameInterface->FindGameVersion(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |