目标 c - 用 C++ lambda 模仿 Obj-C 块行为
objective c - Imitating Obj-C block behaviour with C++ lambdas
是否可以像使用 Objective-C 块一样使用 C++ lambda?
以下面的Objective-C代码为例:
@interface MyClass : NSObject
// ...
- (void)myMethodWithBlockParam:(void(^)(void))block;
//
@end
消息将按如下方式发送:
[myClassInstance myMethodWithBlockParam:^{
// Do something inside block
}];
有没有办法在使用 lambda C++中达到相同的效果?
在C++你可以做
struct MyClass {
void myMethodWithBlockParam(std::function<void()> block);
};
这将用 lambda 调用为
myClassInstance.myMethodWithBlockParam([]()->void {
// Do something inside block
});
这很容易扩展到具有参数和返回类型的函数。使用 std::function 的专用化作为函数参数类型允许传递任何可调用的指定签名(函数、函数对象、lambda)。
Lambda 也可以是闭包,即通过引用或值(作为副本)从其定义上下文中绑定变量。
相关文章:
- 如何在.obj文件上运行IlDasm?
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 在 opengl 中渲染 obj 文件时出现黑窗口
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 正在读取 obj 文件!(指数)
- 我在主函数的左括号上不断收到错误,消息为obj\Debug\main.o||在函数"ZN11linked_listC1Ev"中:|
- float* 已在 Gameobject.obj 中定义
- 可执行文件C++包括.obj,.lib和.dll吗?
- C++成功复制动态分配的 obj 而不复制 ctor?
- OBJ 文件C++与 ubuntu 问题
- 如何用 gcc 或 clang 模仿_mm256_loadu_epi32?
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- OBJ 向量到成员函数
- 如何模仿派生到基本指针自动投射?
- 在istream_iterator中使用后的 C++ FSTREAM obj 回滚
- 使用sscaf_s从obj读取顶点线不起作用
- 移植DXUT SDKMesh以导入OBJ文件,在哪里添加纹理坐标和索引
- /usr/bin/ld: build-debug/obj/gpsitem.o: 文件无法识别: 文件被截断
- 将多个网格放入单个波前 OBJ 文件中
- 目标 c - 用 C++ lambda 模仿 Obj-C 块行为