zoukankan      html  css  js  c++  java
  • 回调函数 typedef bool (*IsUsed)(const string &name,boost::shared_ptr<ShpGeometry> oneGeometry);

    就是指向函数的指针。

    回调函数,表示了一个函数的地址,将函数作为参数进行使用。参考百度百科:http://baike.baidu.com/view/414773.htm

    常用的大概就是在sort函数中了吧。

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

    例子如下:

    函数:typedef int (__stdcall *CompareFunction)(constbyte*,constbyte*)

    使用者:void  DLLDIR __stdcall  Bubblesort(byte* array,int size,int elem_size,CompareFunction cmpFunc);
    使用者:void  DLLDIR __stdcall  Quicksort(byte* array,int size,int elem_size,CompareFunction cmpFunc);
    void DLLDIR __stdcall Bubblesort(byte* array,int size,int elem_size,CompareFunction cmpFunc)
    {
        for(int i=0; i < size; i++)
        {
            for(int j=0; j < size-i-1; j++)
            {
                //回调比较函数
                if(1 == (*cmpFunc)(array+j*elem_size,array+(j+1)*elem_size))
                {
                    //两个相比较的元素相交换
                    byte* temp = new byte[elem_size];
                    memcpy(temp,array+j*elem_size,elem_size);
                    memcpy(array+j*elem_size,array+(j+1)*elem_size,elem_size);
                    memcpy(array+(j+1)*elem_size,temp,elem_size);
                    delete [] temp;
                }
            }
        }
    }
    对编写者来说,不必介意函数在何处实现,或它怎样被实现的,所需在意的只是两个用于比较的元素的地址,并返回以下的某个值(库的编写者和使用者都必须遵守这个约定):
    ·-1:如果第一个元素较小,那它在已排序好的数组中,应该排在第二个元素前面。
    ·0:如果两个元素相等,那么它们的相对位置并不重要,在已排序好的数组中,谁在前面都无所谓。
    ·1:如果第一个元素较大,那在已排序好的数组中,它应该排第二个元素后面。
    int __stdcall CompareInts(const byte* velem1,const byte* velem2)
    {
        int elem1 = *(int*)velem1;
        int elem2 = *(int*)velem2;
        if( elem1 < elem2 )
            return -1;
        if(elem1 > elem2)
            return 1;
        return 0;
    }
    int __stdcall CompareStrings( const byte* velem1, const byte* velem2 )
    {
        const char* elem1 = (char*)velem1;
        const char* elem2 = (char*)velem2;
        return strcmp(elem1,elem2);
    }

    应用:

    Bubblesort((byte*)array,5,sizeof(array[0]),&CompareInts);

    Quicksort((byte*)str,5,10,&CompareStrings);

  • 相关阅读:
    php 函数汇总
    php 图片base64编码生成dataurl和保存为图片
    bootstrap
    PHPWord
    js json排序
    UE用法
    判断移动端是苹果还是安卓,以及安卓版本
    shell终极操作
    LINUX yum用法
    jquery对checkbox的操作汇总
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3442133.html
Copyright © 2011-2022 走看看