是否可以访问boost :: function类型中包含的参数?
我希望能够检索要调用的函数的地址,以及为该函数提供的参数的值。
答案 0 :(得分:2)
boost :: function会删除实现类型,但是如果你知道它,你可以强制转换它;因为boost :: function与值(==!=)相当,所以信息清晰可用。
看起来(来自functionN的function_base超类)你可以得到实现对象:
f.target<concrete_functor_type>()
如果提供了错误的具体类型,将返回NULL。
同样在function_base中(可能没有超出上述目标方法的帮助):
public: // should be protected, but GCC 2.95.3 will fail to allow access
detail::function::vtable_base* vtable;
mutable detail::function::function_buffer functor;
vtable可让您访问:
struct vtable_base
{
void (*manager)(const function_buffer& in_buffer,
function_buffer& out_buffer,
functor_manager_operation_type op);
};
可以获得函子的typeid:
case get_functor_type_tag:
out_buffer.type.type = &typeid(F);
out_buffer.type.const_qualified = in_buffer.obj_ref.is_const_qualified;
out_buffer.type.volatile_qualified = in_buffer.obj_ref.is_volatile_qualified;
return;
}
function_buffer(functor)仅对refs函数对象,绑定(这是固定的)成员函数ptrs和自由函数有用,你没有绑定任何参数