函数指针在 c++++ 中用于在运行时指向函数,方便动态加载和调用。其语法为:typedef void (*functionpointer) (void); 和 functionptr = &somefunction;。在实战中,函数指针可用于动态加载库,例如创建一个包含“hello”函数的库,并在主程序中加载和调用它,这涉及使用 dlopen 和 dlsym 函数。

C++ 函数指针如何用于动态加载库
函数指针是 C++ 中强大的工具,它允许您在运行时指向函数。这在需要在程序中动态加载和调用函数时特别有用,例如在使用插件或扩展时。
语法很简单:
立即学习“C++免费学习笔记(深入)”;
// 函数指针类型 typedef void (*FunctionPointer)(void); // 指向函数的指针 FunctionPointer functionPtr;
要将函数指针分配给函数,请使用函数地址运算符 (&):
functionPtr = &someFunction;
然后,您可以通过函数指针调用函数:
functionPtr();
实战案例:动态加载库
让我们用函数指针来演示如何动态加载库。我们将创建一个简单的库,其中包含一个“hello”函数,然后在主程序中加载并调用它。
创建库(hello.dll/so)
#includeextern "C" { void hello() { std::cout << "Hello from the library!" << std::endl; } }
加载库
在主程序中,我们可以使用 dlopen 函数加载库并获取指向函数的句柄:
#includeint main() { // 加载库 void *handle = dlopen("hello.dll/so", RTLD_LAZY); if (!handle) { std::cerr << "Error loading library: " << dlerror() << std::endl; return 1; } // 获取函数指针 FunctionPointer helloFunc = (FunctionPointer)dlsym(handle, "hello"); if (!helloFunc) { std::cerr << "Error getting function pointer: " << dlerror() << std::endl; return 1; } // 调用函数 helloFunc(); // 卸载库 dlclose(handle); return 0; }
在这个例子中,我们首先加载库并检查错误。然后,我们使用 dlsym 函数获取名为 hello 的函数的函数指针。最后,我们调用函数并卸载库。










