打印函数
#pragma once
#include "CoreMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(MM, Log, All);
inline DEFINE_LOG_CATEGORY(MM);
// FString
template <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
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);
}
}