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

时间:2015-07-18 17:04:04

标签: c++ callback static-libraries

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

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

// 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 个答案:

答案 0 :(得分:0)

有可能的选项,但必须将某些内容传递给库以进行回调。

  1. 从主程序传递一个函数指针(你已经提到过了)。
  2. 在库中定义一个接口类,主程序将实现该接口类并将其传递给库(更优雅)。
  3. 在库可以访问的某个地方注册函数指针或接口对象(只是一个间接级别而不是直接传递)
  4. 希望它有所帮助。