gpt4 book ai didi

c++ - 在 C++ 库中创建回调函数

转载 作者:行者123 更新时间:2023-12-03 12:50:30 26 4
gpt4 key购买 nike

我想创建一个包含多个对象并管理它们的库。但是,如果对象发生某些情况,那么我希望能够在使用该库的项目中执行其他操作。

以下是我想要做的事情的简短示例:

// 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.
}

正如您所看到的,我希望库调用在主项目中声明的函数,但是我也希望它不会提示该函数尚未在主项目中声明。

我可以这样做吗?如果是这样,怎么办? (如果可能的话,我想避免将变量传递到库的选项,例如函数指针)。

最佳答案

有可能的选项,但必须向库传递/设置一些内容才能回调。

  1. 从主程序传递一个函数指针(您已经提到过)。
  2. 在库中定义一个接口(interface)类,主程序将实现该接口(interface)类并将其传递给库(更优雅)。
  3. 在库可以访问的某个地方注册函数指针或接口(interface)对象(只是比直接传递更间接的一层)

希望有帮助。

关于c++ - 在 C++ 库中创建回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31493494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com