2014-12-04 50 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语法。