gpt4 book ai didi

c++ - 访问 boost::function 参数

转载 作者:行者123 更新时间:2023-11-28 03:59:49 24 4
gpt4 key购买 nike

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

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

最佳答案

boost::function 删除实现类型,但如果你知道它,你可以转换为它;由于 boost::function 是按值比较的 (== !=),因此信息清晰可用。

看起来(来自 functionN 的 function_base 父类(super class))您可以通过以下方式获取实现对象:

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) 仅对函数对象的引用、绑定(bind)(这是固定的)成员函数 ptrs 和自由函数有用,您没有绑定(bind)任何参数

关于c++ - 访问 boost::function 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com