我的问题是:
我正在尝试实现一个可以调用基本EXE中的函数的C ++库。我试图在EXE端使用最少量的代码来使功能正常工作。
目前我有DLL端实体,它们是由DLL函数调用创建的。这些实体包含一个“动作”容器,它只是一个字符串映射(动作名称)和指向EXE端函数的指针。这些函数中的每一个都返回void,并将boost :: any的容器作为参数。然后EXE必须在每个tick中调用DLL中的更新函数,并且DLL执行思考并调用适当的“动作”。
这适用于普通功能。我怎样才能使这个也适用于会员功能? (DLL不知道函数所在的对象类型。)
如果我的问题太模糊,请告诉我,我会尽力澄清。
谢谢!
答案 0 :(得分:2)
你想要的是boost :: bind和boost :: function。
dll侧图将具有boost :: functions而不是函数指针。客户端将使用boost :: bind传递绑定对象,这可能是您想要的任何内容。
DLL方:
typedef boost::function<void ()> CallbackFunctionType;
CallbackFunctionType gCallback;
void SetCallback(CallbackFunctionType& callback)
{
gCallback = callback;
}
void Update
{
if (condition == true)
{
gCallback();
}
}
在客户端:
class CallbackClass
{
void CallbackMember();
};
CallbackClass x;
dllInterface->SetCallback(bind(&CallbackClass::CallbackMember, &x));
dllInterface->Update();
希望这就是你要找的东西。