是否可以将一个对象的回调复制到另一个对象中?
现在我正在处理一个具有如下成员的数据结构:
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(©Obj, &vectorOfObj.at(0), sizeof(Obj));
,但我认为我没有正确使用它。
提前致谢。
更新:这是创建 Obj 的文件的样子:
调用者.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
}