读书人

函数作为形参有何意义解决办法

发布时间: 2012-03-22 17:43:57 作者: rapoo

函数作为形参有何意义

void Out(int a) { cout<<a<<" "; }
int i=0;
void Tout(int b[],void Out(int a))
{
Tout(b[i++],Out);
}


[解决办法]
百度
回调函数

设计模式中所谓的命令模式,就是回调函数的面向对象的实现
[解决办法]

C/C++ code
#include <iostream>using namespace std;void f1(){    cout <<"i am f1()" <<endl;}void f2(){    cout <<"i am f2()" <<endl;}void f3(){    cout <<"i am f3()" <<endl;}typedef void (*func)();void call(func f){    f();}int main(){    func p[]={f1,f2,f3};    for(int i=0;i<3;++i)        call(p[i]);    return 0;}
[解决办法]
函数也是个特殊的指针罢了,可以传的。

回调函数是其主要用途:
下面例子中的CompareFunction 就是回调函数,这样用户就可以自己定义两个元素比较的规则,使得排序算法更加通用。

网上的一个例子:
C/C++ code
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-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;   }  } }}
[解决办法]
探讨

void Out(int a) { cout<<a<<" "; }
int i=0;
void Tout(int b[],void Out(int a))
{
Tout(b[i++],Out);
}

[解决办法]
generic programming到处都是function pointer.
[解决办法]
探讨
引用:

void Out(int a) { cout<<a<<" "; }
int i=0;
void Tout(int b[],void Out(int a))
{
Tout(b[i++],Out);
}


LZ代码编译不能通过

读书人网 >C++

热点推荐