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

时间:2011-04-28 01:07:27

标签: c++ boost

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

 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。)

1 个答案:

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