我有一个C ++动态链接库。我想做的是在库中声明一个回调函数,然后让用户在使用库的代码中定义。伪代码示例:
//in library
void userDefinedFunction();
void libraryFunction() {
//do stuff
userDefinedFunction();
//do more stuff
}
//in user code
void userDefinedFunction() {
//user-specific code
}
在现代C ++中这可能吗?
当然。您的库可以接受指向用户定义函数的函数指针,也可以接受用户给出的对仿函数的引用。 void libraryFunction()将仅使用它来调用用户函数。
您可以使用功能库中的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;
}