复制回调



是否可以将一个对象的回调复制到另一个对象中?

现在我正在处理一个数据结构,其成员如下:

class Obj
{
  // some unrelated variables
  // some unrelated functions
  void (*callback)(Obj& r, void* user);
  void* callback_data;
}

回调函数的分配方式如下:

o->callback = AFunctionInAnotherScope;

保留Obj的一个向量,但每次迭代都必须调用该向量的clear()

回调函数在另一个范围内,该范围也分配回调函数。

当前作用域无法访问回调函数,但我想创建新的Obj并为它们分配相同的回调。有办法做到这一点吗?

e:到目前为止,我已经尝试使用memcpy(&copyObj, &vectorOfObj.at(0), sizeof(Obj));,但我认为我没有正确使用。

提前感谢。

更新:下面是创建Obj的文件:

Caller.cpp

#include "SomeClass.h"
void Callback(Obj& r, void* dummy_data)
{
   // do things
}
int main( int argc, char* argv[] )
{
   for(int i = 0; i < SomeClass::vectorOfOBj.size(); ++i)
   {
      vectorOfObj.at(i).callback = Callback;
   }
}

之后,在另一个不能访问Caller.cpp但可以访问SomeClass.h的文件中

#define VAR(V,init) __typeof(init) V=(init)
#define FOR_EACH(I,C) for(VAR(I,(C).begin());I!=(C).end();I++)
void Run()
{
   FOR_EACH(o, vectorOfObjects)
   {
     Obj &b = *o;
     r->callback(b, o->callback_data);
   }
   vectorOfObjects.clear();
   // repopulate vectorOfObject, might not be the same size as before. Could be bigger
}

你的回调只是一个指针,那么简单地复制它有什么错呢?

copyObj.callback = vectorOfObj.at(0).callback;

在你的例子中,可能只是在清除vector之前存储指针:

typedef void (*callback_t)(Obj& r, void* user);
callback_t cb = vectorOfObj.at(0).callback;
vectorOfObj.clear();
// later...
Obj o;
o.callback = cb;

最新更新