gpt4 book ai didi

c++ - 如何从任何可调用的对象中获取有意义的函数签名

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:20 25 4
gpt4 key购买 nike

考虑这样一个野兽:

template<typename Func>
void register_function(Func func) {
// type-erase Func and pass it on to some other function
}

假设这可以传递任何可调用的东西。

如果Func,我知道如何得到函数的签名是一个普通的函数类型。鉴于 func可以是一个简单的函数,一个 std::function<F> ,或一个函数对象(一个 std::bind() 表达式),我怎样才能得到函数的参数?

注意:

  • 在这种情况下,函数只有零个、一个或两个参数
  • 如果它是一个函数对象,它就是std::bind()的结果
  • 需要签名才能获得参数的类型,这需要在传递的类型删除的事物中可用

  • 这是严格的 C++03(嵌入式平台),因此没有变量模板参数等。

最佳答案

不可能。函数对象可以重载或模板化 operator()。因此,它具有“签名”的想法根本不适用,因为它可以有无限数量的签名。

如果将其限制为只有一个签名,则可以获取 operator() 的地址,然后使用常规模板特化从成员函数指针类型获取参数。

关于c++ - 如何从任何可调用的对象中获取有意义的函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383318/

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