C++ 如何在C++;图书馆档案?

C++ 如何在C++;图书馆档案?,c++,callback,function-pointers,libraries,C++,Callback,Function Pointers,Libraries,我正在开发一个图书馆。我想在库中使用回调函数来注册将从Lua环境调用的事件。“我的库”具有所有较低层的函数(在-reg\u callback.cpp®\u callback.h文件中)。所有高层函数都将在Lua环境(Lua脚本)中 参照此链接,下有一个简单的回调函数;我的main()在Lua脚本中,库中有一个Lua包装器。我的代码看起来像这样 enter code here typedef void(*callback)(char*); <br/> bool register

我正在开发一个图书馆。我想在库中使用回调函数来注册将从Lua环境调用的事件。“我的库”具有所有较低层的函数(在-reg\u callback.cpp®\u callback.h文件中)。所有高层函数都将在Lua环境(Lua脚本)中

参照此链接,下有一个简单的回调函数;我的main()在Lua脚本中,库中有一个Lua包装器。我的代码看起来像这样

enter code here typedef void(*callback)(char*); <br/> bool register_callback(callback ptr_reg_callback); <br/>// reg_callback.cpp bool <br/>register_callback(callback ptr_reg_callback)<br/> {
          <br/>  (*ptr_reg_callback)();
          <br/>  return true;<br/>} <br/>// Lua_wrapper_for_callback.cpp <br/> reg_callback obj; <br/>int luaWrapper_register_callback (lua_State *L) <br/>{ <br/>if (obj. register_callback())                                          //Not sure what argument to pass here
在此处输入代码typedef void(*callback)(char*)
布尔寄存器回调(回调ptr\u reg\u回调)
//reg\u callback.cpp bool
注册回调(回调ptr\u reg\u回调)
{
(*ptr_reg_callback)();
返回true;
}
//Lua\u wrapper\u for\u callback.cpp
reg\u callback obj
int luaWrapper\u register\u callback(lua\u State*L)
{
if(obj.register\u callback())//不确定在这里传递什么参数

{
lua_pcall(L,0,0,0);
lua_pushnumber(L,0);


返回1;
}
//Lua脚本
obj=require(“库”)
本地函数测试(f_cMessage)
打印(“\n测试…….测试函数”,f_cMessage)
end
本地寄存器=obj.register_回调(Test())
打印(“\n打印:”,寄存器)

来自“Wireshark”(packet-gsm\u a\u rp.c)的示例


这听起来像。你的示例程序没有给出你想要的正确图片。你说的超载是什么意思?是否要使用函数对象?如果您使用的是普通的func指针,那么您可以随时为函数指针分配不同的函数。让我重新讨论整个问题。虽然这个代码片段可以解决这个问题,但它确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
guint16 (*rp_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len) = {
/* Short Message Service Information Elements [5] 8.2 */
de_rp_message_ref, /* RP-Message Reference */
de_rp_orig_addr,   /* RP-Originator Address */
de_rp_dest_addr,   /* RP-Destination Address */
de_rp_user_data,   /* RP-User Data */
de_rp_cause,       /* RP-Cause */
NULL,   /* NONE */
};
static guint16 de_rp_message_ref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
 guint32    curr_offset;

curr_offset = offset;

proto_tree_add_item(tree, hf_gsm_a_rp_rp_message_reference, tvb, curr_offset, 1, ENC_BIG_ENDIAN);

curr_offset++;

/* no length check possible */

return(curr_offset - offset);
}