c++ - 复制回调?

标签 c++ callback scope

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

现在我正在处理一个包含如下成员的数据结构:

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

回调分配如下:

o->callback = AFunctionInAnotherScope;

保留了 Obj 的 vector ,但每次迭代都必须对该 vector 调用 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
}

最佳答案

你的回调只是一个指针,所以简单地复制它有什么问题?

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;

关于c++ - 复制回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779908/

相关文章:

c++ - 使用fstream从C++中的.txt文件获取文本的问题

c++ - 既然你可以在 C++ 中以两种方式声明一个复制构造函数,那哪种方式是正确的?

java - 监听(注册)接口(interface)的特定方法而不实现所有方法,Java

javascript - 迷失在 javascript 范围内

php - 在 PHP 中保护来自 "include pollution"的变量

ruby - Ruby 中的线程作用域

c++ - 如何使我的组件实体系统线程安全?

c++ - 如何使用C++在Qt中的sqlite数据库中获取行

javascript - 从回调中调用 asyncwait

c++ - 将返回 void 但具有整数参数的函数作为 ARGUMENT 本身传递给另一个函数