- 注册时间
- 2004-11-1
- 最后登录
- 2018-4-24
版主
- 积分
- 548
|
楼主 |
发表于 2007-11-16 22:55:41
|
显示全部楼层
我的程序水平在javaeye里是绝对的不入流,没脸在那里记blog。[s:5]
以前学委托和函数指针的时候写了玩的,D中委托和函数指针的区别。- import std.stdio:writefln;
- int function(int, int) padd; //函数指针
- int delegate(int, int) dadd; //委托
- int (*cpadd)(int, int);//和padd等价
- //int function(int, int) pfunc;
- //int delegate(int, int) dgfunc;
-
- int myadd(int a, int b) {return a+b;} //在外面的函数,没有环境信息,&后为函数指针
- class Cmyadd
- {
- int add(int a, int b) {return a+b;}
- }
- void main()
- {
- static int myadd2(int a, int b) {return a+b;}//嵌套的静态函数,没有环境信息,&后为函数
- int myadd3(int a, int b) {return a+b;}//嵌套的动态函数,带有环境信息,&后为委托
- Cmyadd myadd4 = new Cmyadd;//类,结构中,带有环境信息,&后为委托
- padd = &myadd;
- writefln(padd(1,0));
- padd = &myadd2;
- writefln(padd(2,0));
- // padd = &myadd3;//cannot implicitly convert expression (&myadd2) of type int delegate(int, int) to int(*)(int, int)
- // padd = &myadd4.add;// cannot implicitly convert expression (&myadd3.add) of type int delegate(int, int) to int(*)(int, int)
-
- // dadd = &myadd; //cannot implicitly convert expression (& myadd) of type int(*)(int, int) to int delegate(int, int)
- // dadd = &myadd2;//func.d(29): Error: cannot implicitly convert expression (& myadd2) of type int(*)(int, int) to int delegate(int, int)
- dadd = &myadd3;
- writefln(dadd(3,0));
- dadd = &myadd4.add;
- writefln(dadd(4,0));
-
- cpadd = &myadd;
- writefln(cpadd(1,0));
- cpadd = &myadd2;
- writefln(cpadd(2,0));
- // cpadd = &myadd3;//cannot implicitly convert expression (&myadd2) of type int delegate(int, int) to int(*)(int, int)
- // cpadd = &myadd4.add;//cannot implicitly convert expression (&myadd3.add) of type int delegate(int, int) to int(*)(int, int)
- int a(int delegate(int, int) fdg, int a, int b) {return (fdg(a,b));}
- writefln(a(&myadd3, 5,5));
-
- int b(int function(int, int) fp, int a, int b) {return (fp(a,b));}
- writefln(b(&myadd, 10,10));
- }
复制代码 |
|