TArray
:
- 使用
GetData()
或&Array[0]
获取连续内存指针。
TSet
和 TMap
:
- 不支持直接获取连续内存指针,需通过迭代器访问元素。
FString
、FName
、FText
:
- 通过相应的方法获取内部字符串指针,如
GetData()
、Get()
等。
FBufferArchive
:
- 使用
GetData()
获取缓冲区指针。(新手可暂时忽略,了解其用途即可)
FMemoryReader
和 FMemoryWriter
:
- 用于在内存中读写数据,常与
TArray<uint8>
结合使用。
1. TArrat(动态数组)
获取数据指针的方法:
GetData()
- 作用:返回指向数组中第一个元素的指针。
- 示例:
TArray<int32> MyArray = {1, 2, 3, 4};
int32* Ptr = MyArray.GetData();
&MyArray[0]
- 作用:通过获取数组第一个元素的地址来获取指针(前提是数组不为空)。
- 示例:
if (MyArray.Num() > 0)
{
int32* Ptr = &MyArray[0];
}
2. Tset(集合)
获取数据指针的方法:
- 直接获取指针不可行
TSet
不像TArray
那样提供连续的内存存储,因此无法直接获取整个集合的指针。建议使用智能指针进行管理。
- 使用迭代器访问元素
- 示例:
#include "Containers/Set.h"
#include "Templates/SharedPointer.h"
#include "Logging/LogMacros.h"
// 在某个函数中执行以下代码
void ExampleFunction()
{
// 创建一个存储 TSharedPtr<int32> 的 TSet
TSet<TSharedPtr<int32>> MySet;
// 创建并添加智能指针到集合中
TSharedPtr<int32> Num1 = MakeShareable(new int32(1));
TSharedPtr<int32> Num2 = MakeShareable(new int32(2));
TSharedPtr<int32> Num3 = MakeShareable(new int32(3));
TSharedPtr<int32> Num4 = MakeShareable(new int32(4));
MySet.Add(Num1);
MySet.Add(Num2);
MySet.Add(Num3);
MySet.Add(Num4);
// 遍历集合并访问每个元素
for (const TSharedPtr<int32>& ElementPtr : MySet)
{
if (ElementPtr.IsValid())
{
UE_LOG(LogTemp, Warning, TEXT("当前元素的值: %d"), *ElementPtr);
}
}
}
3. TMap(键值对映射)
获取数据指针的方法:
- 直接获取指针不可行
- 类似于
TSet
,TMap
也不提供连续内存存储,无法直接获取整个映射的指针。
- 类似于
- 使用迭代器访问键值对
- 示例:
TMap MyMap;
MyMap.Add(TEXT(“One”), 1);
MyMap.Add(TEXT(“Two”), 2);
for (const TPair& Pair : MyMap)
{
// 访问每个键值对,例如 Pair.Key 和 Pair.Value
}
4. FString(字符串)
获取字符指针的方法:
GetCharArray().GetData()
- 作用:获取
FString
内部字符数组的指针(包括结束符\0
)。 - 示例:
- 作用:获取
FString MyString = TEXT(“Hello”);
TCHAR* Ptr = MyString.GetCharArray().GetData();
operator*
或Get()
- 作用:获取指向字符串数据的指针。
- 示例:
FString MyString = TEXT(“Hello”);
const TCHAR* Ptr = *MyString; // 或 MyString.Get()
5. FName(名称)
获取名称字符串指针的方法:
GetPlainNameString()
- 作用:返回名称的
FString
表示,可以进一步获取指针。 - 示例:
- 作用:返回名称的
FName MyName = TEXT(“ExampleName”);
FString NameString = MyName.GetPlainNameString();
const TCHAR* Ptr = *NameString;
6. FText(本地化文本)
获取文本字符串指针的方法:
ToString()
- 作用:将
FText
转换为FString
,然后获取指针。 - 示例:
- 作用:将
FText MyText = FText::FromString(TEXT(“Localized Text”));
FString TextString = MyText.ToString();
const TCHAR* Ptr = *TextString;
7. FBufferArchive(二进制缓冲区)
获取缓冲区指针的方法:
GetData()
- 作用:返回缓冲区中数据的指针。
- 示例:
FBufferArchive Buffer;
Buffer.AddUninitialized(100);
uint8* Ptr = Buffer.GetData();
提示:
FBufferArchive
是 UE 中用于处理二进制数据的一种工具,通常用于序列化数据或将数据写入文件。作为新手,可以先了解它的基本用途,实际项目中逐步深入学习其具体用法。