成员函数的boost::function没有target()

No target() of boost::function of a member function

本文关键字:target 没有 function boost 成员 函数      更新时间:2023-10-16

我试图以这种方式获得一个指向函数的指针:

 boost::function<void(float)> Function;
 Function = boost::bind(&myClassType::myMemberFunction, this, _1);
 void(*)(float) finalFunction = *Function.target<void(*)(float)>();
/* crash becouse Function.target<void(*)(bool)>() is null */

但是我不能得到指针。我哪里错了?我做了什么不被允许的事吗?

(我必须将finalFunction传递给lua_register.)

function::target()定义如下(我使用c++ 11草案,我认为这比boost的参考更清晰):

per c++ 0x n3290 20.8.11.2.5[function .wrap. function .targ]/3

返回:如果target_type() == typeid(T)一个指向存储函数目标的指针;否则为空指针。

在您的情况下,T是您的类型void(*)(float),但Function.target_type()根本不是,它是用于初始化boost::函数的boost表达式的类型。

简而言之,是的,这是不允许的。解决方法并不明显,但这里有一个:将boost::函数降级为普通函数指针