我有這種類型的功能:我想他們包裹裏面是這樣另一個模板函數C++返回模板函數
type uniRndtype()
{
return typeValue;
}
現在:
template<typename T>
T(* uniRndType(void))()
{
if (is_same<T, bool>::value)
{
return uniRndBool;
} else if (is_same<T, char>::value)
{
return uniRndChar;
} else
...
}
,並調用它像這樣:
uniRndType<int>();
但我發現了一個錯誤:「錯誤:返回值類型不匹配日e功能類型「 ,因爲每個返回都有不同的類型。
我有一種方法可以使它工作嗎?因爲從運行時的角度來看,我沒有看到任何錯誤,只有編譯器有問題。
使用'static_cast'將函數強制轉換爲返回類型。 – Barmar
您似乎混合了編譯時和運行時後勤。 T由調用者在編譯時預先確定;不是運行時間 – WhozCraig
錯誤是因爲所有返回類型必須與'T'兼容才能實現該方法。如果你用一個字符串調用它,'uniRndType()'那麼編譯器如何處理你得到的返回一個布爾值的代碼? –
Sean