有一些模板会以函数为模板参数,有时候这些模板要获得函数的返回值和参数。如在boost中的signal和slot机制,就存在这样情况。
那么,我们如何得到这些信息呢?
我们使用C++不完全实例化来实现。
比如,有这个代码
typedef function_traits<void (int,const char*)> Signal;
能够得到Signal::result_type == void, Signal::arg1_type == int, Signal::arg2_type == const char*?
要想获得这种效果,必须通过Function的指针来实现,我们借助一个function_traits_help模板来实现。
template<typename Function>
struct function_traits : public function_traits_help<Function*>
{
};
function_traits_help类接受Function的指针为参数。
函数类型和函数指针是不一样的,如
void (int,int)//定义一个函数类型
void (*)(int, int) //定义了一个函数指针
template<typename Func>
struct FuncType {
typedef FuncPtr funcPtr;
};
FuncType<void(int,int)>::funcPtr 等同于 void(*)(int,int)
首先,定义主模板
</