加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读