功能指针参数的自动返回类型

Automatic return types for function pointer arguments?

本文关键字:返回类型 指针 参数 功能      更新时间:2023-10-16

我正在创建一个模板函数,尽管我试图进一步简化语法。

到目前为止,我有类似的东西:

template< typename obj, typename ret, typename... args >
auto py_wrapped_func( ret (obj::*f)( args... ) )
{
    // Do some stuff with the function pointer.
}

麻烦是,有时返回类型为RET,很疯狂。我想知道是否有办法将其简化为以下内容:

template< typename obj, typename... args >
auto py_wrapped_func( decltype(auto) (obj::*f)( args... ) )
{
    // Do some stuff with the function pointer.
}

显然,这不会编译 - "函数原型中不允许使用exttype(auto)"。有更好的方法吗?

我知道我可以直接在函数类型上模板,但是我宁愿避免在使用模板或使用decltype(&obj::func)时必须写出模板功能类型。无论如何,我需要参数args作为模板参数。

我猜想编译器需要明确了解功能指针类型,而不仅仅是对象和一些参数。我问太多了吗?也许我是?

这也许是这个问题的重复。

无法通过模板参数扣除提供该函数的参数,但是函数可以。一个简单的解决方案是重新排列模板参数如下:

template< typename... args, typename obj, typename ret >
auto py_wrapped_func( ret (obj::*f)( args... ) )
{
    // Do some stuff with the function pointer.
}

现在可以从参数中推断出对象和返回类型。

我不确定这是否可以与左侧的variadic模板参数一起使用。但是,它似乎可以很好地编译...