UE网络-WithIdenticalViaEquality详解
WithIdenticalViaEquality
是什么
在属性同步时候, 如果想自定义比较函数应该怎么处理呢?
WithIdenticalViaEquality
就是表明该结构体使用Operator ==
进行比较.
注意它和WithIdentical
互斥.
自定义结构体指定WithIdenticalViaEquality
1 | USTRUCT() |
将WithIdenticalViaEquality
映射到EStructFlags::STRUCT_IdenticalNative
构建UScriptStruct
在PreInit时候,构建UScriptStruct
将WithIdenticalViaEquality
属性映射到EStructFlags::STRUCT_IdenticalNative
构建UScriptStruct, 通过模板,
指定WithIdenticalViaEquality
属性.
好了, 到此为止,
已经将我们指定的WithIdenticalViaEquality
映射到EStructFlags::STRUCT_IdenticalNative
上了.
即UScriptStruct.StructFlags已经包含EStructFlags::STRUCT_IdenticalNative
属性.
在比较中使用自定义比较函数
堆栈:
1 | --UActorChannel.ReplicateActor.if.{ |
在进行属性比较的时候调用PropertiesAreIdentical:
调用Struct的比较函数:UScriptStruct::CompareScriptStruct
,
因为有标志位:STRUCT_IdenticalNative
,
所以进行自定义比较.
调用UScriptStruct.TCppStructOps.Identical
,
因为是类型WithIdenticalViaEquality
,
所以最终调用了operator==
最终调用了自定义operator==
函数.