好吧,我有一个从我的代码运行的抽象虚拟机(“ 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)。