草庐IT

java - Java 中的闭包或类似的东西

自从我为Android开发以来,我一直在努力寻找一种方法来将类似于Closure的东西合并到Java1.6中。我想要什么(在一个完美的世界中)我有一个类,我们将其称为“项目”。然后我有这些的arrayList。ArrayListitems=newArrayList;在每一个items.get(x)中,我想保存一段代码,在调用时执行。此代码块需要发生在包含ArrayList项的类的范围内。我唯一的半脑想法是在包含“items”的类中创建方法,并在每个“item”实例中保存函数的名称,然后使用反射来调用这些方法....我很怀疑这是否可能,但无论如何我都会在这里找到答案。提前感谢您的帮助。

php - 为什么 C++11 和 PHP 闭包需要声明闭包变量?

C++和PHP中的函数字面值都要求程序员从当前词法上下文中指定他们正在使用的变量。此要求背后的原因是什么?我想这不是为编译器/解释器准备的,因为可以从函数字面量的主体中静态地推断出这些信息。仅仅是为了引起读者的注意吗? 最佳答案 至少对于C++11,[=](){...}将自动拉入所有且仅拉入函数体使用的局部变量。(或者,同样地,[&]...)如果您有超出此包罗万象的任何特定需求,您可以指定要通过引用或值捕获的各个变量。在PHP中,变量是在其名称首次使用时创建的,因此我希望声明是为了确保没有新变量掩盖旧变量。有点像global关键字。

c++ - 添加了闭包的 Perl newXS()

我想将Perl嵌入到C++应用程序中,并且正在寻找一种通过newXS()从Perl调用C++的方法。除了函数指针之外,我还需要将一个自定义指针关联到由newXS()创建的CV。该指针包含一个C++上下文。我不想为此使用全局变量。有没有一种通用的方法可以做到这一点?在更广泛的范围内,问题可能是天气有可能向由newXS()创建的CV添加一个闭包,以及在调用已注册的c函数时如何引用它它。CvPADLIST()似乎是完美的地方,但是对于XSubs,当设置PERL_IMPLICIT_CONTEXT时它似乎无效(在perl的pad.c开头注释。它可以被忽略吗?)。有没有其他地方可以放置CV本地数据

c++ - C++ lambdas 是真正的闭包吗?通过引用捕获

在下面的代码中,我创建了一个通过引用捕获局部变量的lambda。请注意,它是一个指针,因此,如果C++lambda是真正的闭包,它应该在创建lambda的函数的生命周期内存活。然而,当我再次调用它时,它并没有创建一个新的局部变量(一个新的环境),而是重用了与以前相同的内容,事实上,它捕获了与以前完全相同的指针。这似乎是错误的。要么,C++lambda不是真正的闭包,要么我的代码不正确?谢谢你的帮助#include#include#includestd::functioncreate_counter(){std::shared_ptrcounter=std::make_shared(0)

c++ - 为什么 std::remove_if 创建这么多闭包?

在此示例中,foo实例除了打印它是复制构造的还是移动构造的之外什么都不做。#include#include#includestructfoo{foo()=default;foo(foo&&){std::coutv;//emptystd::remove_if(v.begin(),v.end(),[x=std::move(x)](inti){returnfalse;});}这会产生以下输出:moveconstructedcopyconstructedmoveconstructedmoveconstructedcopyconstructedcopyconstructed问题:为什么std::

c++ - Lambda 闭包类型构造函数

cppreference表明lambda闭包类型构造函数有不同的规则。默认构造-直到C++14ClosureType()=delete;(untilC++14)ClosuretypesarenotDefaultConstructible.Closuretypeshaveadeleted(untilC++14)no(sinceC++14)defaultconstructor.默认构造-自C++14起Closuretypeshaveno(sinceC++14)defaultconstructor.默认构造-自C++20起Ifnocapturesarespecified,theclosure

C++ 闭包 hack

这样的闭包实现有什么问题吗(从pythonhack中偷来的)?voidfunction(intvalue){structclosure{closure(intv=value):value_(value){}private:intvalue_;};closurec;}进一步研究发现,在成员函数中,局部变量不能作为默认值,但对象变量可以。 最佳答案 这看起来是结束的良好基础。更多的是成语而不是hack,因为您合法地使用语言功能来实现其预期目的。当然,您的示例不会执行任何操作。并且它只能在function中使用。免费的C++0x插件:#i

c++ - C++0x lambda 和 operator()、闭包和仿函数之间的区别

我确信我了解了构造的一般要点,但我看不到它们在C++中的用途。我已经在SO和其他地方阅读过关于该主题的先前帖子,但我不明白为什么它们应该成为一种新的语言功能。我想回答的事情是这样lambda和接受函数/仿函数的模板参数有什么区别。闭包只是一个具有某些设置对象状态(作用域?)的仿函数吗?这些结构的“killer级应用”是什么?还是典型的用例? 最佳答案 Lambda实际上只是仿函数的语法糖。你可以自己做这一切:定义一个新类,创建成员变量来保存捕获的值和引用,将它们连接到构造函数中,编写operator()(),最后创建一个实例和通过它

c++ - g++:用闭包类型初始化的 std::function 总是使用堆分配?

Internet上的一些来源(特别是thisone)说std::function使用小闭包优化,例如如果闭包大小小于一定数量的数据,它不会分配堆(上面的链接表示gcc为16字节)所以我深入研究了g++header看起来是否应用这种优化是由“功能”header(g++4.6.3)中的这段代码决定的staticvoid_M_init_functor(_Any_data&__functor,_Functor&&__f){_M_init_functor(__functor,std::move(__f),_Local_storage());}还有几行:staticvoid_M_init_func

c++ - 在 lambda 闭包中复制的 const 对象不可变

我正在尝试通过(可变)lambda中的拷贝来捕获const对象。然而,我的编译器提示说,捕获的对象是常量。难道不能将对象复制为非常量吗?structFoo{Foo(){}voidFunc(){}};intmain(){constFoofoo;[foo]()mutable{foo.Func();};}用g++4.7.2编译:testcase.cpp:Inlambdafunction:testcase.cpp:10:29:error:nomatchingfunctionforcallto‘Foo::Func()const’testcase.cpp:10:29:note:candidatei