如何编写代码实现外部闭包中下

本篇内容介绍了“如何编写代码实现外部闭包中下”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联建站基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业BGP机房服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

在函数定义点:

需要在虚拟包装器类型内定义函数,

需要从伪类型上下文指针转换为所需的实际类型;

这会丢弃上下文指针类型的所有类型安全性,并导致运行时开销

在函数调用点:

需声明个虚拟类型实例;请注意,此声明除了获得该函数的闭包外没有其他用途.

提取到闭包后,将ptr其设置为独立的语句,该语句为运行时错误创建新位置

要设置闭包上下文指针,必须将类型强制转换为(空*);像定义点一样,这会丢弃上下文指针类型的任何类型安全性,并会导致一些运行时开销.

而外(闭包)解决方法很简单,清晰,类型安全.没有伪包装器类型,没有在定义点或调用点进行转换,没有运行时开销,并且在类型安全语句中提取闭包.

外(闭包)空 writelnWithTime(ref File file,string msg)
{
   file.writeln(Clock.currTime,"  ",msg);
}

文件 文件;
动 我们闭包=&file.writelnWithTime;

重大更改/弃用过程

该建议仅要求用不会破坏d的新语法.

例子

==

演示用法的示例:

构  Foo
{
   空 巴(int x)
   {
   }
}
外(闭包)空 baz(ref Foo foo,int x)
{
}

//注意,即使在`foo构`内定义`bar`成员函数
//`baz`函数也与`bar`ABI相同.

空 闭包(int)dg;
Foo foo;

dg=&foo.bar;    //普通成员函数闭包
dg(42);         //调用foo.bar(42)

dg=&foo.baz;  //使用UFCS提取`外(闭包)`baz函数的闭包
dg(42);//调用baz(foo,42);

dg=&baz;//错误:无法将`外(闭包)`类型空函数(ref Foo,int)类型的表达式(baz)隐式转换为`空 闭包(int)`

更现实例子:

导入 std.stdio,std.datetime ;

外(闭包)空 writelnWithTime(T)(ref File foo,T[]buffer)
{
   foo.writeln(Clock.currTime,"  ",buffer);
}

空 main()
{
   dumpInfo(&stdout.writeln!(const(char)[])));
   //使用UFCS获取闭包给`外(闭包)`writelnWithTime函数
   dumpInfo(&stdout.writelnWithTime!(const(char)[]))
}

空 dumpInfo(空 闭包(const(char)[])writer)
{
   writer(" 一 Info:");
   writer("   2 = 2 ");
   writer("   3!= 4 ");
}

“如何编写代码实现外部闭包中下”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!

分享名称:如何编写代码实现外部闭包中下
网页路径:https://www.cdcxhl.com/article44/ggeiee.html

成都网站建设公司_创新互联,为您提供自适应网站移动网站建设搜索引擎优化网站维护做网站网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名