如何使用原始函数指针初始化boost::function
对象?
元代码
extern "C"
{
class Library
{
...
};
Library* createLibrary();
}
...
void* functionPtr = library.GetFunction("createLibrary");
boost::function<Library*()> functionObj(functionPtr);
Library* libInstance = functionObj();
如果您需要其他信息,请告诉我。
答案 0 :(得分:1)
void*
不是函数指针,因此您无法从中创建boost::function
。您可能希望首先将其转换为正确的函数指针。如何做到这一点取决于实现。
这是在POSIX(rationale)中推荐这种丑陋转换的方式:
void* ptr = /* get it from somewhere */;
Library* (*realFunctionPointer)(); // declare a function pointer variable
*(void **) (&realFunctionPointer) = ptr // hack a void* into that variable
您的平台可能需要不同的恶作剧。
一旦有了这样的指针,你就可以做到:
boost::function<Library*()> functionObj(realFunctionPtr);
Library* libInstance = functionObj();
答案 1 :(得分:0)
使用boost :: bind,你可以将函数字面地绑定到boost函数对象。
boost::function</*proper function pointer type*/> functionObj = boost::bind(functionPtr);