UE C++ Cookbook
#pragma once
#include "CoreMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(MM, Log, All);
inline DEFINE_LOG_CATEGORY(MM);
// FStringtemplate <typename T>void TPrint(FString DataName, const T& Data){ UE_LOG(MM, Log, TEXT("%s : %s"), *DataName, *Data);}
template <>inline void TPrint<float>(FString DataName, const float& Data){ UE_LOG(MM, Log, TEXT("%s : %.3f"), *DataName, Data);}
template <>inline void TPrint<double>(FString DataName, const double& Data){ UE_LOG(MM, Log, TEXT("%s : %.3f"), *DataName, Data);}
template <>inline void TPrint<int>(FString DataName, const int& Data){ UE_LOG(MM, Log, TEXT("%s : %d"), *DataName, Data);}
template <>inline void TPrint<bool>(FString DataName, const bool& Data){ UE_LOG(MM, Log, TEXT("%s : %s"), *DataName, Data ? TEXT("True") : TEXT("False"));}
#define MPrint(var) UE_LOG(MM, Log, TEXT("%s"), *(var));#define MMPrint(var) TPrint<std::decay_t<decltype(var)>>(TEXT(#var), var)
struct FSeparatorRAII{ FSeparatorRAII(const FString& InName) : Name(InName) { FString Sep = FString(TEXT("---------")) + Name + FString(TEXT("----------")); MPrint(Sep); }
~FSeparatorRAII() { MPrint(FString(L"---------") + Name + FString(L"----------")); }
FString Name;};FString、FName
Section titled “FString、FName”void BlinkEditorModule::TestFString(){ FString Str("aaa"); FString WStr(TEXT("Aaa")); MMPrint(WStr); MMPrint(Str.Len()); MMPrint(WStr.Len()); MMPrint(WStr == Str); // default: Ignore_Case MMPrint(WStr.Equals(Str)); // default: Case_Sensitive
// API FString S = L"www.google.com";
// Split { FSeparatorRAII Sep(FString(L"Split")); FString left, right; S.Split(".", &left, &right); MMPrint(left); MMPrint(right); S.Split(L".", &left, &right); MMPrint(left); MMPrint(right); }
// Append { FSeparatorRAII Sep(FString("Append")); S.Append(L"?我为什么这么帅"); MPrint(S); }
// SubString Methods { FSeparatorRAII Sep(FString("SubString Methods")); int32 Idx;
S.FindChar('?', Idx); MMPrint(Idx);
MMPrint(S.Mid(Idx)); MMPrint(S.Mid(Idx, 3)); MMPrint(S.RightChop(Idx)); // 去掉右侧n个字符,返回剩下的 MMPrint(S.Right(Idx)); // 返回右侧n个字符 MMPrint(S.LeftChop(2)); // 去掉右侧n个字符,返回剩下的 MMPrint(S.Left(2)); // 返回左侧n个字符 }
{ FSeparatorRAII Sep(FString("FName")); FName N1(FString("yes")); FName N2(FString("Yes")); MPrint(N1.ToString()); MPrint(N2.ToString()); MMPrint(N1 == N2); }}