C ++动态链接库中的回调函数

问题描述 投票:0回答:2

我有一个C ++动态链接库。我想做的是在库中声明一个回调函数,然后让用户在使用库的代码中定义。伪代码示例:

//in library
void userDefinedFunction();

void libraryFunction() {
    //do stuff
    userDefinedFunction();
    //do more stuff
}
//in user code
void userDefinedFunction() {
    //user-specific code
}

在现代C ++中这可能吗?

c++ function callback
2个回答
0
投票

当然。您的库可以接受指向用户定义函数的函数指针,也可以接受用户给出的对仿函数的引用。 void libraryFunction()将仅使用它来调用用户函数。


0
投票

您可以使用功能库中的std::function。这是带有lambda表达式和函数的示例

#include <iostream>
#include <functional>

 std::function<int (int)> func;

int testfunc(int i)
{
    std::cout<<"testfunc function called "; 
    return i+7; 

}

void process()
{
    if (func)
        std::cout<<func(3)<<std::endl;
}
int main()
{
    process();
    func = [](int i) { 
        std::cout<<"Lambda function called "; 
        return i+4; 
    };
    process();
    func = testfunc;
    process();
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.