在c++库中创建回调函数
Creating a Callback Function in a C++ Library
我想创建一个包含多个对象并照顾它们的库。但是,如果某些事情发生在对象上,那么我希望能够在使用库的项目中执行其他操作。
下面是我想做的一个简短的例子:
// Library:
class LibraryClass {
public:
bool Init() { /* Blah. */ }
void Shutdown() { /* Blah blah. */ }
void Update() {
for( int i( 0); i < m_objects.size(); ++i) {
bool somethingHappened = m_objects[i].Update();
if( somethingHappened)
CallBackFunctionToMainProject( &m_objects[i]);
}
}
private:
std::vector<Objects> m_objects;
};
// Project that uses the library:
class Program {
public:
void Run() {
m_libClass = new LibraryClass();
m_libClass.Init();
while( true) {
m_libClass.Update();
OtherUpdateStuff();
}
m_libClass.Shutdown();
delete m_libClass;
}
private:
LibraryClass* m_libClass;
};
void CallBackFunctionToMainProject( Object* obj) {
// Do stuff.
}
所以你可以看到,我希望库调用在主项目中声明的函数,但是我也希望它不抱怨,如果函数没有在主项目中声明。
我可以这样做吗?如果有,是怎么做到的?(如果可能的话,我希望避免将变量传递给库的选项,例如函数指针)。
有可能的选择,但必须传递/设置一些东西给库以进行回调。
- 从主程序传递一个函数指针(你已经提到过)。
- 在库中定义一个接口类,由主程序实现并传递给库(更优雅)。
- 在库可以访问的某个地方注册一个函数指针或接口对象(只是比直接传递的间接级别)
希望能有所帮助。
相关文章:
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- 从不同的 cpp 调用回调函数会导致bad_function_call
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- C 回调函数在对象 pascal 上崩溃
- 类 Referention 中C++回调函数引用非静态函数
- CURLOPT_INTERLEAVEFUNCTION回调函数始终接收 nullptr 作为用户数据指针
- 动态链接库中C++回调函数
- 我想制作设置鼠标回调函数,以便在仍然按下鼠标左键时连续传递坐标
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 我可以使用谷歌 v8 在回调函数中获取 JavaScript 函数C++源文本吗?
- 重写另一个方法 [C++] 使用的超类回调函数
- 是否可以影响 C++ 中回调函数的局部变量?
- C++ Qt5 中带有 pigpio 库的回调函数
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- C++在赋值或回调函数时重载模板
- 如何用不同的参数类型和数字回调函数
- 如何为Python Swigged C++对象创建和分配回调函数
- 用回调函数替换C++正则表达式
- C++带有回调函数的模板类