我正在创建一个带有函数指针的模板化函数,尽管我试图进一步简化语法。
到目前为止,我有类似的内容:
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.
}
显然这不会编译 - &#34;在函数原型&#34;中不允许使用decltype(auto)。有没有更好的方法来解决这个问题?
我知道我可以直接在函数类型上模板,但我更倾向于避免在使用模板或使用decltype(&obj::func)
时写出模板函数类型。我需要将参数args
作为模板参数在模板中显式化。
我猜测编译器需要明确地了解函数指针类型,而不仅仅是对象和一些参数。我问得太多了吗?也许我是?
答案 0 :(得分:0)
这可能是this问题的重复。
函数的参数不能通过模板参数推导提供,但函数可以。一个简单的解决方案是重新排列模板参数,如下所示:
template< typename... args, typename obj, typename ret >
auto py_wrapped_func( ret (obj::*f)( args... ) )
{
// Do some stuff with the function pointer.
}
现在可以从参数中推断出对象和返回类型。
我不确定这会在左侧使用可变参数模板参数。但似乎编译得很好......