我正试图以这种方式获得指向函数的指针:
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。)
答案 0 :(得分:1)
function::target()
已定义(我正在使用C ++ 11草案,我认为它比boost's reference更清晰),如下所示:
每个C ++ 0x n3290 20.8.11.2.5 [func.wrap.func.targ] / 3
返回:如果target_type()== typeid(T)指向存储的函数目标的指针;否则为空指针。
在您的情况下,T
是您的类型void(*)(float)
,但Function.target_type()
根本不是,它是用于初始化boost :: function的boost表达式的类型。 / p>
所以简而言之,是的,这是不允许的。解决方法并不明显,但这里有一个:demote boost::function to a plain function pointer