function

本文深入探讨了信息技术领域的多个细分技术领域,包括前端开发、后端开发、移动开发、游戏开发、大数据开发等,旨在为读者提供全面的技术知识概览。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

名称                        类型         说明
----------------------------------------------------------------------------------
Abort                       函数         引起放弃的意外处理 
Abs                         函数         绝对值函数 
AddExitProc                 函数         将一过程添加到运行时库的结束过程表中 
Addr                        函数         返回指定对象的地址 
AdjustLineBreaks            函数         将给定字符串的行分隔符调整为CR/LF序列 
Align                       属性         使控件位于窗口某部分 
Alignment                   属性         控件标签的文字位置 
AllocMem                    函数         在堆栈上分配给定大小的块 
AllowGrayed                 属性         允许一个灰度选择 
AnsiCompareStr              函数         比较字符串(区分大小写) 
AnsiCompareText             函数         比较字符串(不区分大小写) 
AnsiLowerCase               函数         将字符转换为小写 
AnsiUpperCase               函数         将字符转换为大写 
Append                      函数         以附加的方式打开已有的文件 
ArcTan                      函数         余切函数 
AssignFile                  函数         给文件变量赋一外部文件名 
Assigned                    函数         测试函数或过程变量是否为空 
AutoSize                    属性         自动控制标签的大小 
BackgroundColor             属性         背景色 
BeginThread                 函数         以适当的方式建立用于内存管理的线程 
BevelInner                  属性         控件方框的内框方式 
BevelOuter                  属性         控件方框的外框方式 
BevelWidth                  属性         控件方框的外框宽度 
BlockRead                   函数         读一个或多个记录到变量中 
BlockWrite                  函数         从变量中写一个或多个记录 
BorderStyle                 属性         边界类型 
BorderWidth                 属性         边界宽度 
Break                       命令         终止for、while、repeat循环语句 
Brush                       属性         画刷 
Caption                     属性         标签文字的内容 
ChangeFileExt               函数         改变文件的后缀 
ChDir                       函数         改变当前目录 
Checked                     属性         确定复选框选中状态 
Chr                         函数         返回指定序数的字符 
CloseFile                   命令         关闭打开的文件 
Color                       属性         标签的颜色 
Columns                     属性         显示的列数 
CompareStr                  函数         比较字符串(区分大小写) 
Concat                      函数         合并字符串 
Continue                    命令         继续for、while、repeat的下一个循环 
Copy                        函数         返回一字符串的子串 
Cos                         函数         余弦函数 
Ctl3D                       属性         是否具有3D效果 
Cursor                      属性         鼠标指针移入后的形状 
Date                        函数         返回当前的日期 
DateTimeToFileDate          函数         将DELPHI的日期格式转换为DOS的日期格式 
DateTimeToStr               函数         将日期时间格式转换为字符串 
DateTimeToString            函数         将日期时间格式转换为字符串 
DateToStr                   函数         将日期格式转换为字符串 
DayOfWeek                   函数         返回星期的数值 
Dec                         函数         递减变量值 
DecodeDate                  函数         将日期格式分解为年月日 
DecodeTime                  函数         将时间格式分解为时、分、秒、毫秒 
Delete                      函数         从字符串中删除子串 
DeleteFile                  命令         删除文件 
DiskFree                    函数         返回剩余磁盘空间的大小 
DiskSize                    函数         返回指定磁盘的容量 
Dispose                     函数         释放动态变量所占的空间 
DisposeStr                  函数         释放字符串在堆栈中的内存空间 
DitherBackground            属性         使背景色的色彩加重或减少50% 
DragCursor                  属性         当鼠标按下时光标的形状 
DragMode                    属性         按动的作用方式 
DropDownCount               属性         容许的显示数据项的数目 
EditMask                    属性         编辑模式 
Enabled                     属性         是否使标签呈现打开状态 
EncodeDate                  函数         将年月日合成为日期格式 
EncodeTime                  函数         将时、分、秒、毫秒合成为时间格式 
EndMargin                   属性         末尾边缘 
Eof                         函数         对有类型或无类型文件测试是否到文件尾 
Eoln                        函数         返回文本文件的行结束状态 
Erase                       命令         删除外部文件 
ExceptAddr                  函数         返回引起当前意外的地址 
Exclude                     函数         从集合中删除一些元素 
ExceptObject                函数         返回当前意外的索引 
Exit                        命令         立即从当前的语句块中退出 
Exp                         函数         指数函数 
ExpandFileName              函数         返回包含绝对路径的字符串 
ExtendedSelect              属性         是否允许存在选择模式,True时,MultiSelect才有意义 
ExtractFileDir              函数         返回驱动器和路径 
ExtractFileExt              函数         返回文件的后缀 
ExtractFileName             函数         返回文件名 
ExtractFilePath             函数         返回指定文件的路径 
FileAge                     函数         返回文件已存在的时间 
FileClose                   命令         关闭指定的文件 
FileCreate                  命令         用指定的文件名建立新文件 
FileDateToDateTime          函数         将DOS的日期格式转换为DELPHI的日期格式 
FileExists                  函数         检查文件是否存在 
FileGatAttr                 函数         返回文件的属性 
FileGetDate                 函数         返回文件的DOS日期时间标记 
FileOpen                    命令         用指定的存取模式打开指定的文件 
FilePos                     函数         返回文件的当前指针位置 
FileRead                    命令         从指定的文件读取 
FileSearch                  命令         在目录中搜索指定的文件 
FileSeek                    函数         改变文件的指针 
FileSetAttr                 函数         设置文件属性 
FileSetDate                 函数         设置文件的DOS日期时间标记 
FileSize                    函数         返回当前文件的大小 
FileWrite                   函数         对指定的文件做写操作 
FillChar                    函数         用指定的值填充连续字节的数 
FindClose                   命令         终止FindFirst/FindNext序列 
FindFirst                   命令         对指定的文件名及属性搜索目录 
FindNext                    命令         返回与文件名及属性匹配的下一入口 
FloatToDecimal              函数         将浮点数转换为十进制数 
FloatToStrF                 函数         将浮点数转换为字符串 
FloatToStr                  函数         将浮点数转换为字符串 
FloatToText                 函数         将给定的浮点数转换为十进制数 
FloatToTextFmt              函数         将给定的浮点数转换为十进制数 
Flush                       函数         将缓冲区的内容刷新到输出的文本文件中 
FmtLoadStr                  函数         从程序的资源字符串表中装载字符串 
FmtStr                      函数         格式化一系列的参数,其结果以参数Result返回 
Font                        属性         设置字体 
Format                      函数         格式化一系列的参数并返回Pascal字符串 
FormatBuf                   函数         格式化一系列的参数 
FormatDateTime              函数         用指定的格式来格式化日期和时间 
FormatFloat                 函数         指定浮点数格式 
Frac                        函数         返回参数的小数部分 
FreeMem                     函数         按给定大小释放动态变量所占的空间 
GetDir                                   返回指定驱动器的当前目录 
GetHeapStatus                            返回内存管理器的当前状态 
GetMem                                   建立一指定大小的动态变量,并将指针指向该处 
GetMemoryManager                         返回内存管理器的入口点 
Glyph                       函数         按钮上的图象 
Halt                                     停止程序的执行并返回到操作系统 
Hi                                       返回参数的高地址位 
High                                     返回参数的上限值 
Hint                        属性         提示信息 
Int                                      返回参数的整数部分 
Include                                  添加元素到集合中 
Insert                                   在字符串中插入子串 
IntToHex                                 将整型数转换为十六进制数 
IntToStr                                 将整型数转换为字符串 
IOResult                                 返回最新的I/O操作完成状态 
IsValidIdent                             测试字符串是否为有效的标识符 
Items                       属性         默认显示的节点 
Kind                        属性         摆放样式
LargeChange                 属性         最大改变值 
Layout                      属性         图象布局 
Length                      函数         返回字符串的动态长度 
Lines                       属性         缺省显示内容 
Ln                          函数         自然对数函数 
Lo                          函数         返回参数的低地址位 
LoadStr                     函数         从应用程序的可执行文件中装载字符资源 
LowerCase                   函数         将给定的字符串变为小写 
Low                         函数         返回参数的下限值 
Max                         属性         最大值 
MaxLength                   属性         最大长度 
Min                         属性         最小值 
MkDir                       命令         建立一子目录 
Move                        函数         从源到目标复制字节 
MultiSelect                 属性         允许同时选择几个数据项 
Name                        属性         控件的名字 
New                         函数         建立新的动态变量并设置一指针变量指向他 
NewStr                      函数         在堆栈上分配新的字符串 
Now                         函数         返回当前的日期和时间 
Odd                                      测试参数是否为奇数 
OnActivate                  事件         焦点移到窗体上时触发 
OnClick                     事件         单击窗体空白区域触发 
OnDblClick                  事件         双击窗体空白区域触发 
OnCloseQuery                事件         使用者试图关闭窗体触发 
OnClose                     事件         窗体关闭后才触发 
OnCreate                    事件         窗体第一次创建时触发 
OnDeactivate                事件         用户切换到另一应用程序触发 
OnDragDrop                  事件         鼠标拖放操作结束时触发 
OnDragOver                  事件         有其他控件从他上面移过触发 
OnMouseDown                 事件         按下鼠标键时触发 
OnMouseUp                   事件         释放鼠标键时触发 
OnMouseMove                 事件         移动鼠标时触发 
OnHide                      事件         隐藏窗体时触发 
OnKeyDown                   事件         按下键盘某键时触发 
OnKeyPress                  事件         按下键盘上的单个字符键时触发 
OnKeyUp                     事件         释放键盘上的某键时触发 
OnPaint                     事件         窗体上有新部分暴露出来触发 
OnResize                    事件         重新调整窗体大小触发 
OnShow                      事件         在窗体实际显示之前瞬间触发 
Ord                                      返回序数类的序数 
OutlineStyle                属性         类型 
OutOfMemoryError                         引起OutOfMemory意外 
PageIndex                   属性         页索引 
Pages                       属性         页 
ParamCount                  函数         返回在命令行上传递给程序的参数数量 
ParamStr                    函数         返回指定的命令行参数 
Pen                         属性         画刷设置 
Pi                          函数         返回圆周率Pi 
Picture                     属性         显示图象 
PictureClosed               属性         设置Closed位图 
PictureLeaf                 属性         设置Leaf位图 
PictureMinus                属性         设置Minus位图 
PictureOpen                 属性         设置Open位图 
PicturePlus                 属性         设置Plus位图 
Pos                         函数         在字符串中搜索子串 
Pred                        函数         返回先前的参数 
Random                      函数         返回一随机函数 
Randomize                   函数         用一随机数初始化内置的随机数生成器 
Read                        函数         对有格式的文件,读一文件组件到变量中;
                                         对文本文件,读一个或多个值到一个或多个变量中 
Readln                      函数         执行Read过程,然后跳到文件下一行 
ReadOnly                    属性         只读属性 
ReAllocMem                  函数         分配一动态变量 
Rename                      函数         重命名外部文件 
RenameFile                  函数         对文件重命名 
Reset                       函数         打开已有的文件 
Rewrite                     函数         建立并打开一新的文件 
RmDir                       函数         删除空的子目录 
Round                       函数         将实数值舍入为整型值 
RunError                    函数         停止程序的执行 
ScrollBars                  属性         滚动条状态 
Seek                        函数         将文件的当前指针移动到指定的组件上 
SeekEof                     函数         返回文件的文件结束状态 
SeekEoln                    函数         返回文件的行结束状态 
SelectedColor               属性         选中颜色 
SetMemoryManager            函数         设置内存管理器的入口点 
SetTextBuf                  函数         给文本文件指定I/O缓冲区 
Shape                       属性         显示的形状 
ShowException               函数         显示意外消息与地址 
Sin                         函数         正弦函数 
SizeOf                      函数         返回参数所占的字节数 
SmallChange                 属性         最小改变值 
Sorted                      属性         是否允许排序 
Sqr                         函数         平方函数 
Sqrt                        函数         平方根函数 
StartMargin                 属性         开始边缘 
State                       属性         控件当前状态 
Str                         函数         将数值转换为字符串
StrAlloc                    函数         给以NULL结束的字符串分配最大长度-1的缓冲区 
StrBufSize                  函数         返回存储在由StrAlloc分配的字符缓冲区的最大字符数 
StrCat                      函数         将一字符串附加到另一字符串尾并返回合并的字符串 
StrComp                     函数         比较两个字符串 
StrCopy                     函数         将一个字符串复制到另一个字符串中 
StrDispose                  函数         释放堆栈上的字符串 
StrECopy                    函数         将一字符串复制到另一个字符串并返回结果字符串尾部的指针 
StrEnd                      函数         返回指向字符串尾部的指针 
Stretch                     属性         自动适应控件的大小 
StrFmt                      函数         格式化一系列的参数 
StrIComp                    函数         比较两个字符串(不区分大小写) 
StringToWideChar            函数         将ANSI字符串转换为UNICODE字符串 
StrLCat                     函数         将一字符串中的字符附加到另一字符串尾并返回合并的字符串 
StrLComp                    函数         以最大长度比较两个字符串 
StrLCopy                    函数         将一个字符串中的字符复制到另一个字符串中 
StrLen                      函数         返回字符串中的字符数 
StrLFmt                     函数         格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 
StrLIComp                   函数         以最大长度比较两个字符串(不区分大小写) 
StrLower                    函数         将字符串中的字符转换为小写 
StrMove                     函数         将一个字符串中的字符复制到另一个字符串中 
StrNew                      函数         在堆栈上分配一个字符串 
StrPas                      函数         将以NULL结束的字符串转换为PASCAL类的字符串 
StrPCopy                    函数         将PASCAL类的字符串复制为以NULL结束的字符串 
StrPLCopy                   函数         从PASCAL类的最大长度字符串复制为以NULL结束的字符串 
StrPos                      函数         返回一个字符串在另一个字符串中首次出现指针 
StrRScan                    函数         返回字符串中最后出现字符的指针 
StrScan                     函数         返回字符串中出现首字符的指针 
StrToDate                   函数         将字符串转换为日期格式 
StrToDateTime               函数         将字符串转换为日期/时间格式 
StrToFloat                  函数         将给定的字符串转换为浮点数 
StrToInt                    函数         将字符串转换为整型 
StrToIntDef                 函数         将字符串转换为整型或默认值 
StrToTime                   函数         将字符串转换为时间格式 
StrUpper                    函数         将字符串中的字符转换为大写 
Style                       属性         类型选择 
Suce                        函数         返回后继的参数 
Swap                        函数         交换参数的高低地址位 
Tabs                        属性         标记每一项的内容 
TabIndex                    属性         标记索引 
Text                        属性         显示的文本 
TextToFloat                 函数         将字符串(以NULL结束的格式)转换为浮点数 
Time                        函数         返回当前的时间 
TimeToStr                   函数         将时间格式转换为字符串 
Trim                        函数         从给定的字符串中删除前导和尾部的空格及控制字符 
TrimLeft                    函数         从给定的字符串中删除首部的空格及控制字符 
TrimRight                   函数         从给定的字符串中删除尾部的空格及控制字符 
Trunc                       函数         将实型值截取为整型值 
Truncate                    函数         截去当前文件位置后的内容 
UnSelectedColor             属性         未选中颜色 
UpCase                                   将字符转换为大写 
UpperCase                                将给定的字符串变为大写 
Val                         函数         将字符串转换为整型值 
VarArrayCreate              函数         以给定的界限和维数建立变体数组 
VarArrayDimCount            函数         返回给定变体的维数 
VarArrayHighBound           函数         返回给定变体数组维数的上界 
VarArrayLock                函数         锁定给定的变体数组 
VarArrayLowBound            函数         返回给定变体数组维数的下界 
VarArrayOf                  函数         返回指定变体的数组元素 
VarArrayRedim               函数         通过改变上限来调整变体的大小 
VarArrayUnlock              函数         解锁指定的变体数组 
VarAsType                   函数         将变体转换为指定的类型 
VarCase                     函数         将变体转换为指定的类型并保存他 
VarClear                    函数         清除指定的变体 
VarCopy                     函数         将指定的变体复制为指定的变体 
VarFormDateTime             函数         返回包含日期时间的变体 
VarIsArray                  函数         测试变体是否为数组 
VarIsEmpty                  函数         测试变体是否为UNASSIGNED 
VarIsNull                   函数         测试变体是否为NULL 
VarToDateTime               函数         将给定的变体转换为日期时间 
VarType                     函数         将变体转换为指定的类型并保存他 
Visible                     属性         控件的可见性 
WantReturns                 属性         为True时,按回车键产生一个回车符;
                                         为False时,按下Ctrl+Enter才产生回车符 
Write                       命令         对有格式的文件,写一变量到文件组件中;
                                         对文本文件,写一个或多个值到文件中 
Writeln                     命令         执行WRITE过程,然后输出一行结束标志 
WideCharLenToString         函数         将ANSI字符串转换为UNICODE字符串 
WideCharLenToStrWar         函数         将UNICODE字符串转换为ANSI字符串变量 
WideCharToString            函数         将UNICODE字符串转换为ANSI字符串 
WideCharToStrVar            函数         将UNICODE字符串转换为ANSI字符串变量 


<think>我们正在讨论的是虚幻引擎中的TFunction。根据引用[1],TFunction的实现位于UnrealEngine/Engine/Source/Runtime/Core/Public/Templates/Function.h中。TFunction是UE中用于封装可调用对象的模板类,类似于C++11中的std::function。它可以存储函数指针、lambda表达式、成员函数指针等。 在虚幻引擎中使用TFunction的步骤: 1. 包含头文件:需要包含Function.h,但通常我们包含CoreMinimal.h即可,因为它会包含核心模板。 2. 声明TFunction类型:TFunction<返回类型(参数列表)>。例如:TFunction<void(int)>表示一个接受int参数且无返回值的函数。 3. 绑定可调用对象:可以将lambda、静态函数、绑定成员函数等赋值给TFunction对象。 4. 调用:使用operator()来调用存储的函数。 注意:在UE中,TFunction是值类型,可以按值传递,但要注意其捕获的对象生命周期。如果捕获了UObject,需要确保不会在对象销毁后调用。 示例代码: 假设我们有一个类,想要使用TFunction: 在头文件中: ```cpp #include "CoreMinimal.h" class MyClass { public: // 声明一个TFunction成员变量 TFunction<void(int)> MyFunction; // 设置函数的方法 void SetFunction(TFunction<void(int)> InFunction); // 执行函数 void ExecuteFunction(int Value); }; ``` 在源文件中: ```cpp void MyClass::SetFunction(TFunction<void(int)> InFunction) { MyFunction = InFunction; } void MyClass::ExecuteFunction(int Value) { if (MyFunction) { MyFunction(Value); } } ``` 使用示例: 我们可以绑定一个lambda表达式: ```cpp MyClass MyObject; MyObject.SetFunction([](int Val) { UE_LOG(LogTemp, Log, TEXT("Value: %d"), Val); }); MyObject.ExecuteFunction(5); // 输出: Value: 5 ``` 也可以绑定一个静态函数: ```cpp static void StaticFunction(int Val) { UE_LOG(LogTemp, Log, TEXT("Static Function: %d"), Val); } MyObject.SetFunction(StaticFunction); MyObject.ExecuteFunction(10); ``` 对于成员函数,我们可以使用lambda捕获this,但要注意生命周期。或者使用TBaseDelegate等UE的委托系统,但TFunction本身不支持直接绑定成员函数,需要借助lambda或静态函数。 重要提示:TFunction在UE4中从某个版本开始引入(大约4.16之后),如果使用较早版本可能没有。另外,TFunction是移动友好的,但不支持复制(因为可能包含捕获的对象,而捕获的对象可能不可复制),所以赋值操作会转移所有权。 另外,在UE中还有其他的函数包装器,如TUniqueFunction(不可复制,只能移动)和TSharedFunction(基于共享指针的函数包装)。TFunction是可复制的,但要求其包装的可调用对象也是可复制的。如果包装了不可复制的对象(例如有unique_ptr捕获的lambda),则不能使用TFunction,而应使用TUniqueFunction。 根据引用[2],我们还可以将TFunction与蓝图调用结合,但TFunction本身是C++的,不能直接暴露给蓝图。蓝图暴露的函数需要使用UFUNCTION,并且参数和返回值必须是UProperty支持的。如果需要在蓝图中调用,可以考虑使用动态委托(如DECLARE_DYNAMIC_DELEGATE)或者将TFunction用于内部C++逻辑。 总结使用步骤: 1. 确定需要封装的可调用对象的签名。 2. 创建TFunction对象并用可调用对象初始化。 3. 在适当的时候调用TFunction。 注意:在异步操作中,如延迟回调,要确保TFunction被调用时,它所捕获的对象仍然有效。 下面是一个在游戏代码中使用TFunction的简单示例: ```cpp // 在某个Actor类中 void AMyActor::BeginPlay() { Super::BeginPlay(); // 创建一个TFunction,用于在定时器触发时调用 TFunction<void()> TimerFunction = [this]() { UE_LOG(LogTemp, Log, TEXT("Timer triggered!")); // 注意:这里捕获了this,所以必须确保在Actor销毁后不会调用此函数 }; // 设置一个定时器,在5秒后执行 GetWorld()->GetTimerManager().SetTimer(TimerHandle, [TimerFunction]() { TimerFunction(); }, 5.0f, false); } ``` 但是注意:上面的例子中,TimerFunction被值捕获到lambda中,而lambda又被传递给定时器。这样在5秒后,定时器会调用lambda,lambda再调用TimerFunction。但是,如果在这5秒内,这个Actor被销毁了,那么TimerFunction中捕获的this就变成了野指针。因此,我们需要使用弱引用或者取消定时器。 改进版:使用弱引用 ```cpp void AMyActor::BeginPlay() { Super::BeginPlay(); TWeakObjectPtr<AMyActor> WeakThis(this); TFunction<void()> TimerFunction = [WeakThis]() { if (WeakThis.IsValid()) { UE_LOG(LogTemp, Log, TEXT("Timer triggered!")); } }; GetWorld()->GetTimerManager().SetTimer(TimerHandle, [TimerFunction]() { TimerFunction(); }, 5.0f, false); } ``` 或者,更常见的是在Actor销毁时清除定时器(在EndPlay或析构中)。 综上所述,TFunction是UE中一个强大的工具,用于封装各种可调用对象,但使用时需注意生命周期和线程安全(TFunction本身不是线程安全的)。 最后,关于引用[2]中的内容,它展示了如何将函数暴露给蓝图(使用UFUNCTION和BlueprintCallable),但TFunction不能直接用于UFUNCTION的参数或返回值。所以,如果需要在蓝图中传递函数,应使用委托(如FOnMyEvent)而不是TFunction。 相关问题: 1. TFunction与std::function有什么区别? 2. 如何在TFunction中绑定成员函数? 3. TFunction在什么情况下会复制? 4. 如何安全地在异步回调中使用TFunction? 5. TFunction和UE的委托系统(Delegate)有何异同?</think>在虚幻引擎中正确使用 `TFunction` 需要理解其核心机制和适用场景。以下是关键使用指南: ### 1. `TFunction` 基础概念 `TFunction` 是虚幻引擎的泛型函数包装器(类似 C++11 的 `std::function`),用于封装任意可调用对象: ```cpp #include "Templates/Function.h" // 必需头文件 // 定义函数签名:返回类型(参数列表) TFunction<void(int, FString)> MyFunction; ``` ### 2. 绑定可调用对象的三种方式 #### (1) Lambda 表达式(最常用) ```cpp MyFunction = [](int Count, FString Name) { UE_LOG(LogTemp, Warning, TEXT("Count: %d, Name: %s"), Count, *Name); }; ``` #### (2) 静态函数 ```cpp static void StaticFunc(int Count, FString Name) { // 函数实现 } MyFunction = &StaticFunc; ``` #### (3) 成员函数(需结合 Lambda) ```cpp class MyClass { public: void MemberFunc(int Count, FString Name) { /*...*/ } }; MyClass Obj; MyFunction = [&Obj](int C, FString N) { Obj.MemberFunc(C, N); }; ``` ### 3. 调用与执行 ```cpp // 安全调用检查 if(MyFunction.IsBound()) { MyFunction.Execute(42, TEXT("Unreal")); // 显式调用 // 或直接 MyFunction(42, TEXT("Unreal")); } ``` ### 4. 结合蓝图暴露的实战示例(引用[2]扩展) ```cpp // MyActor.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyActor.generated.h" UCLASS() class MYPROJECT_API AMyActor : public AActor { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "TFunction Demo") void RunTFunctionExample(); private: TFunction<void(FString)> BoundFunction; }; ``` ```cpp // MyActor.cpp void AMyActor::RunTFunctionExample() { // 绑定Lambda到TFunction BoundFunction = [](FString Message) { UE_LOG(LogTemp, Display, TEXT("Received: %s"), *Message); UKismetSystemLibrary::PrintString(this, Message, true, false); }; // 模拟事件触发 GetWorld()->GetTimerManager().SetTimerForNextTick([this]() { if(BoundFunction.IsBound()) { BoundFunction(TEXT("Hello from TFunction!")); } }); } ``` ### 5. 使用注意事项 1. **生命周期管理** - 避免捕获将被销毁的局部对象 - 对UObject使用弱引用: ```cpp TWeakObjectPtr<UMyObject> WeakObj = ...; BoundFunction = [WeakObj]() { if(WeakObj.IsValid()) WeakObj->Method(); }; ``` 2. **线程安全** - `TFunction` 非线程安全,跨线程调用需加锁 - 游戏线程中建议使用: ```cpp AsyncTask(ENamedThreads::GameThread, [MyFunction]() { MyFunction.ExecuteIfBound(); }); ``` 3. **性能优化** - 小规模调用:直接使用 Lambda - 高频调用:预绑定函数指针 - 避免在每帧中动态绑定 ### 6. 与蓝图交互的最佳实践 ```mermaid graph LR A[蓝图调用UFUNCTION] --> B[C++创建TFunction] B --> C[绑定Lambda/静态函数] C --> D[异步操作/定时器触发] D --> E[执行TFunction] E --> F[调用蓝图可访问的方法] ``` > 关键点:`TFunction` 本身不能直接暴露给蓝图,需通过UFUNCTION包装器桥接[^2] ### 常见问题解决方案 1. **绑定失败检查** ```cpp if(!MyFunction.IsBound()) { UE_LOG(LogTemp, Error, TEXT("Function not bound!")); return; } ``` 2. **参数传递错误** - 确保签名完全匹配 - 使用 `TFunction<void()>` 无参数版本简化调用 3. **多播支持** - 单播:`TFunction` - 多播:使用 `TArray<TFunction<...>>` 或 `DECLARE_MULTICAST_DELEGATE`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值