函数的类型主要集中在以下几种
- 函数指针
- 函数对象,是一个类对象,内部重载的operator()函数是一个函数指针
- lambda,匿名函数对象,同函数对象
- function对象
后三者都是类对象,可以看成一种类型
定义基础模板类
template <typename T>
struct function_traits;
针对函数指针进行偏特化
对于函数指针,存在两种情况
- 直接通过decltype获取类型
- 利用模板推导类型
int pointer_func(int a, int b) {
return a + b;
}
// decltype(pointer_func) is int(int, int)
int pointer_func(int a, int b) {
return a + b;
}
template <typename Func>