我正在嘗試編寫一個模板,它將函數指針的類型作爲templateargument和相應的函數指針作爲函數參數獲取,因此作爲一個簡單的示例,我正在執行此操作:使用函數指針的類型作爲模板參數
int myfunc(int a)
{ return a; }
template<typename T, typename Func> struct Test
{
typedef typeof(myfunc) Fun;
static T MyFunc(T val, Func f)
{
return f(val);
}
};
int main(void)
{
std::cout<<Test<int, typeof(myfunc)>::MyFunc(5, myfunc)<<std::endl;
}
但是,這段代碼立即崩潰。如果我將f的類型更改爲Fun
,它可以很好地工作。 那麼我做錯了什麼,我該如何得到這個工作?
我在windows vista下使用mingw,如果行爲是編譯器依賴的情況。
typeof不是C++的一部分,所以甚至沒有在我的編譯器上編譯 – 2009-12-19 20:42:32
在這裏完美編譯和運行。 – 2009-12-19 20:44:21
'typeof'是GCC的擴展。我假設它在MSVC上不可用。 – ZoogieZork 2009-12-19 20:54:55