(UE4)在标头中保存lambda函数
(UE4) Save a lambda function in the header
我目前正在定义一个lamda函数,我想将其保存在头文件中。
void FURealisticGraspingEditorModule::OnPreviewCreation(const TSharedRef<IPersonaPreviewScene>& InPreviewScene)
{
TSharedRef<IPersonaToolkit> PersonaToolKitRef = InPreviewScene.Get().GetPersonaToolkit();
auto lambda = [PersonaToolKitRef]() { return PersonaToolKitRef.Get(); };
DebugMeshComponent = PersonaToolKitRef.Get().GetPreviewMeshComponent();
}
lamda变量应保存在标头中。我还没能做到这一点,现在我很好奇这是否可能。我尝试了auto和TFunctionRef。也许你们可以给我一个提示,让我实现这个,甚至用另一种方法将这个调用保存在变量中。
为了在初始化lambda变量时单独声明它,您需要将其存储在std::function
中。lambda的类型只有在创建时才是已知的,因此不可能声明一个变量来单独存储它。
例如:
auto a = []{ return 1; }; // OK
auto b; // invalid, can't declare as auto as the type can't be deduced
b = []{ return 1; };
std::function< bool() > c;
c = []{ return 1; }; // OK, we can store a lambda in std::function
如果为C++17编译并声明它为inline
,则可以在头文件中定义(并初始化(lambda。
至少,我认为它适用于lambdas,试试看。
Lambdas可以存储在函数指针中,而不需要太多的精力,比如:
在页眉中:double (*lambda)(double);
在.cpp文件中:lambda = [&](double a) { return 2*a; };
这种方法的问题在于,定义的lambda类型不能是动态的。我的意思是,分配的lambda需要与标头中定义的类型匹配,因此它必须具有相同的返回类型,并且在类型方面,必须具有完全相同的参数列表。
还有一件小事。在C++中,不允许在同一范围内重新声明函数和变量。如果您直接在头文件中定义一个变量,并且碰巧将其包含在多个源文件中,您将以疯狂错误的形式得到令人不快的惊喜。在头文件中,使用extern
定义变量,然后在一个源文件中正常定义,以避免出现问题。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在C++中将类(带有Vector成员)保存为二进制文件
- C++.我想将更改后的特定字符行保存在字符串中
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 在 lambda 捕获中声明的变量的类型推导
- (UE4)在标头中保存lambda函数
- 将匿名函数(lambda)保存为函数类型变量
- 如何保存lambda以供以后回调
- 将lambda表达式或函数保存为二进制文件