类型对应Getter
在InputActionValue这个类中,使用模板Get处理不同类型的特化Get
template<>
inline bool FInputActionValue::Get() const
{ return IsNonZero(); }
template<>
inline FInputActionValue::Axis1D FInputActionValue::Get() const
{ return Value.X; }
template<>
inline FInputActionValue::Axis2D FInputActionValue::Get() const
{ return Axis2D(Value.X, Value.Y); }
template<>
inline FInputActionValue::Axis3D FInputActionValue::Get() const
{ return Value; }
这样在想获取一个类型对应的Get的时候就可以用模板来实现,如
SetDesiredGait(ActionValue.Get<bool>() ? A : B);
弧度之间的近似判断
if(constexpr float AngleTolerance = 1e-3f, !FMath::IsNearlyEqual(CurrentRotation.Yaw, DesiredRotation.Yaw, AngleTolerance)
1e-3f 是一个较小的值,表示允许的角度误差范围。在大多数情况下,这个精度已经足够满足游戏或图形应用中对旋转角度的判断需求。如果两个角度的差值小于 1e-3f,则认为它们是“几乎相等”的。
浮点数计算存在精度限制,直接比较两个浮点数是否完全相等通常是不安全的。使用一个小的容差值(如 1e-3f)可以避免因浮点数精度问题导致的误判。1e-3f 是一个在性能和准确性之间取得平衡的常用值。
缺少导出宏导致在项目无法链接到插件中的函数
如果在项目中引用插件中的类,结构体,但不能使用这个类中的函数,编译时会提示无法链接,则有可能是缺少导出宏。
- 导出和导入符号:
- 当一个模块(例如一个插件或游戏模块)定义了一个类或函数,并且希望其他模块能够使用它时,需要使用这个宏来标记该类或函数为“导出”。
- 当其他模块使用这个类或函数时,需要使用这个宏来标记为“导入”。
- 跨模块边界:
- 在Windows平台上,DLL(动态链接库)需要明确指定哪些符号(类、函数、变量)是导出的(供其他模块使用),哪些是导入的(从其他模块使用)。这个宏帮助编译器正确处理这些符号。
- 平台兼容性:
- 这个宏在不同平台上有不同的定义。例如,在Windows上,它可能会扩展为
__declspec(dllexport)或__declspec(dllimport),而在其他平台上(如Linux或Mac),它可能什么都不做(因为不需要显式导出/导入符号)。
- 这个宏在不同平台上有不同的定义。例如,在Windows上,它可能会扩展为
Comments NOTHING