将函数指针绑定到boost :: function对象

时间:2011-12-02 15:33:18

标签: c++ function-pointers boost-bind boost-function function-object

如何使用原始函数指针初始化boost::function对象?

元代码

extern "C"
{
    class Library
    {
        ...
    };
    Library* createLibrary();
}

...

void* functionPtr = library.GetFunction("createLibrary");
boost::function<Library*()> functionObj(functionPtr);

Library* libInstance = functionObj();

如果您需要其他信息,请告诉我。

2 个答案:

答案 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);