我正在試圖找出非成員函數的返回類型。我首先想到std::result_of
完成了這項工作,但它看起來後者只適用於可調用對象。特別是,std::result_of<decltype(f)>::type
is not working。我終於想出一些代碼,工作推導獨立函數的返回類型
#include <iostream>
#include <typeinfo>
void f(int); // we deduce the returning type of this function
template<typename Ret, typename... Args>
struct Helper
{
using type = Ret;
};
template<typename Ret, typename... Args>
Helper<Ret, Args...> invoke(Ret(*fp)(Args...))
{
return {};
}
template<typename Ret, typename... Args>
using Return_Type = typename Helper<Ret, Args...>::type;
int main()
{
std::cout << typeid(decltype(invoke(f))::type).name() << std::endl; // fine
}
我在這裏使用一個附加功能,模板invoke
,這需要一個指針,我想推斷返回類型的函數,並返回一個「幫手」結構,我從中讀取實際的返回類型。
該代碼似乎有點複雜,因爲它涉及調用函數(雖然沒有執行實際評估)。有沒有其他的選擇更簡單,更清楚/更短的方式來做到這一點?
我猜你不要婉使用' decltype(F(0))'。 –
不,因爲'f'可以有可變/未知數量的參數,並且希望某些功能適用於任何功能。 – vsoftco
'result_of'可以和函數指針一起工作。 'result_of :: type'是'void'。你只是錯誤地使用它,併爲了不同的目的。 –
Yakk