是否有可能將一個對象的回調複製到另一個對象中?複製回調?
現在我正在處理一個數據結構的成員如下所示:
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的問題(哎呀,你已經在編輯中發現了這個問題) –