是否有可能将一个对象的回调复制到另一个对象中?复制回调?
现在我正在处理一个数据结构的成员如下所示:
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的文件看起来像:
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
}
你不应该使用'memcpy'类对象。但是,您应该能够使用复制构造函数进行复制。如果没有明确定义,编译器将默认创建一个。 –
@CodyGray:更确切地说,你不应该在非POD类型上使用'memcpy'(和他的朋友'malloc','realloc','strcpy','free')。 C结构也是类对象,但它们是POD。但确实,这是一个很好的经验法则(如果适用的话,我会尽可能称之为平均任务的良好实践)不要将这些函数用于任何对象。 –
我遗漏了技术细节,因为没有理由在C++中对类对象使用'memcpy'。这不是关于C的问题(哎呀,你已经在编辑中发现了这个问题) –