2014-12-04 51 views
-5
auto func(int (*(*pf)(int *)), int *p) -> int *(*)(int *) 
{ 
    cout << *(pf(p)) << endl; 
    return pf; 
}//C++11 Standard 

int *(*func2(int (*(*pf)(int *)), int *p))(int *) 
{ 
    cout << *(pf(p)) << endl; 
    return pf; 
}//Before C++11 standard 

這是一個函數,它接受一個int函數指針和一個int指針作爲參數,並返回一個int函數指針。如何在C++中構造一個沒有typedef的複雜函數指針?

如何爲這個函數創建一個指針?

+9

爲什麼你的縮進如此離奇?爲什麼不是一個typedef或兩個,以便您的代碼可讀? – 2014-12-04 12:46:47

+0

儘管我確信可以在不使用'typedef'的情況下編寫這樣一個指針,但我絕對不會這樣做。 – harper 2014-12-04 12:47:06

+1

'std :: function'或使用typedefs允許更多可讀代碼。 – Noel 2014-12-04 12:47:21

回答

1
template<class T> using type=T; 

template<class R, class...Args> 
using sig=R(Args...); 

typedef sig<int *(*)(int *) ,int (*(*)(int *)), int *>* pFun; 

typedef 
type<int *(*(int (*(*)(int *)), int *))(int *)>* pFun2; 

應用遞歸,使用using和/或寬鬆typedef

在C++ 03中,您可以使用ptr_to<X>::type

當然,這很愚蠢,因爲你真的想用有意義的類型名稱來解決問題,而不是使用模板tomfoolery或者使用模板文件夾語法R & R語法。