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==函数.
