您好,登录后才能下订单哦!
这篇文章主要介绍“外部闭包上中的方法教程”,在日常操作中,相信很多人在外部闭包上中的方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”外部闭包上中的方法教程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
此更改的第一个原因是它修复了语义上的漏洞,即在UFCS调用中取函数地址.该提议为此赋予了与现有语义一致的含义.
外(闭包)的最典型的用例是定义使用外部类型上下文指针的闭包函数("闭包函数"是可称为闭包的函数),.
注意:此用例与标.函数.转闭包方法不同,后者可从函数创建闭包,但不允许函数使用上下文指针.
假设我们创建std.stdio.File引用作为上下文指针的闭包函数,让我们调用writelnWithTime,并让它在当前时间前的文件中写一行.通常,用作闭包的函数会按成员函数添加到类型中,但不能把成员函数添加到std.stdio.File中,因为它是在其他库中定义的.一种方法是创建包装器类型,并在包装器内定义新闭包函数,例如
构 FileWrapper
{
档案*档案;
空 writelnWithTime(串 msg)
{
file.writeln(Clock.currTime," ",msg);
}
}
文件 文件;
动 w=FileWrapper(&file);
动 我们闭包=&w.writelnWithTime;
这可行,但是要付出代价.它增加了所有权语义的复杂性,潜在的范围错误,不必要的运行时开销,额外的间接级别,并且在调用点上需要额外的样板代码来提取闭包.该方法最严重的问题是它需要增加包装类型.如果我们在应用程序使用的库中定义此包装器,并且该应用程序需要添加自己的闭包函数,则它必须创建"包装器-包装器"类型,从而引入另一种间接性.这不会给程序增加任何价值,但会带来开销和复杂性.
另一个方法:不要类型安全,例如:
构 DummyType
{
空 writelnWithTime(串 msg)
{
File*file=转换(File*)&this ;
file.writeln(Clock.currTime," ",msg);
}
}
文件 文件;
DummyType d;
动 我们闭包=&d.writelnWithTime;
我们闭包.ptr =转换(空*)文件;
到此,关于“外部闭包上中的方法教程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。