访问boost :: function参数

时间:2009-09-08 17:44:57

标签: c++ boost boost-bind

是否可以访问boost :: function类型中包含的参数?

我希望能够检索要调用的函数的地址,以及为该函数提供的参数的值。

1 个答案:

答案 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和自由函数有用,你没有绑定任何参数