最开始接触到这个应该是在openGL的回调函数里面,当时对这种机制想了很久才明白,但也只是明白机制,具体的实现方法还是不清楚,哈哈哈,今天不小心看到了指针函数的用法,瞬间感觉会爱了!而且也见识到了抽象确实是c++中很重要的思想,实在是太有才了!
先贴出代码,然后解释
#include
bool IsEven( const int num)
{
//==符号的优先级比&号的优先级高
return (num&1) == 0; //偶数为true,
// if( num & 1 == 0)
// std::cout<<"num:"<
贴出上面的代码,一部分是作为对函数指针的用法的理解,还有一部分就是说对可能考虑到的功能的扩展,IsEven()函数是判断奇偶的,下面的Reorder函数是将数组中的奇数部分都放到前面,偶数部分都放到后面,本来是可以很直接的在Reorder函数里面判断奇偶然后交换,但是如果把需求改一改,需要将数组中所有的负数和非负数分别放在数组的前面和后面,或者3的倍数和非3的倍数分别放到前面和后面,虽然可以直接在Reorder函数中改动,但是如果我们写成上面的形式,定义一个函数指针,就可以直接写出判断分组的标准的函数,即判断负数和非负数,3的倍数或者非3的倍数的函数,然后通过一次调用Reorder函数将判断的分组的函数作为参数传递进去就ok了!顺利的结解决了这个问题,在openGL中同样如此,回调函数中有函数指针,我们定义自己的绘图函数,然后通过回调函数,实现不同的灵活的操作,这个在对不同但相似的功能有了更灵活的解决办法。真心觉得好用!不过同时也强调一定的综合抽象能力。