1、对于回调机制的理解
函数B要完成一个功能,但是自己无法完成一定功能,需要借助函数A来完成,也就是回调函数。注意区分普通函数的使用和回调函数的使用。我的理解就是函数为参数。这个参数可以是函数指针,函数对象等可调用函数对象。
2、基于函数指针的回调函数
typedef void (*Callback) (char * str);
void ab(char* str) {
cout << str << endl;
return ;
}
void ba(Callback call, char* str) {
ab(str);
return ;
}
int main()
{
char *str = "hello word";
ba(ab, str);
}
//hello word;
3、基于函数对象的回调函数
class CallbackObject{
public:
void operator() (char* str) {
cout << str << endl;
}
};
void baf(CallbackObject call, char* str) {
call(str);//编译器将语句call(arg)转化为call.operator()(arg);
return ;
}
int main()
{
char *str = "hello word";
baf(CallbackObject(),str);
}
hello word
函数指针与函数对象相比:函数指针的调用,有函数调用的开销。函数对象的使用,可以在调用处转换为内联方式,减少了函数调用的开销。
4、STL中sort函数
在STL中sort函数,第三个参数既可以用函数指针,也可以用函数对象。
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
这个 Compare,编译器在编译的时候,会判定类型。