簡體   English   中英

函數指針參數的自動返回類型?

[英]Automatic return types for function pointer arguments?

我正在創建一個接受函數指針的模板化函數,盡管我試圖進一步簡化語法。

到目前為止,我有這樣的事情:

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.
}

顯然,這無法編譯-“函數原型中不允許使用decltype(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.
}

現在可以從參數中推斷出對象和返回類型。

我不確定這是否可以與左側的可變參數模板參數一起使用。 但是它似乎可以編譯...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM