有沒有辦法找出一個函數的返回類型(或者甚至是一個函數指針的更好)是什麼?如何確定模板實例化時函數的返回類型?
我有下面的代碼,當我使用一個空函數指針打破,但對於任何其他的返回類型工作正常。使用gcc 4.5中的void函數指針時出現的錯誤是:
error: void value not ignored as it ought to be
這是有道理的。所以很顯然,我需要檢查函數指針是否返回某些內容,然後獲取結果並將其返回。
template <class F,typename R> class Instruction
{
protected:
F (func);
R result;
public:
template <typename T>
Instruction(T const& f)
{
func = &f;
};
template <typename A> void execute(A const& a)
{
result = (func)(a);
};
template <typename A> void execute(A const& a,A const& b)
{
result = (func)(a,b);
};
template <typename A> void execute(A const& a,A const& b,A const& c)
{
result = (func)(a,b,c);
};
R get_result()
{
return result;
};
};
通常,我用一個函數指針,該做的東西大多算術函數,我可以不是void功能的其他實例照顧任何返回類型。我嘗試實例化爲:
Instruction<ptr2func2,void> foo(bar);
Instruction<ptr2func2,(*void)> foo(bar);
但在兩種情況下都失敗。
在實例化的第二個模板參數是爲了用來定義返回類型是什麼。
你並不需要檢查函數的返回類型,你只需要檢查'R'。這應該更容易,但我不知道如何。 – ikegami