c++ - 如何移动 TArray 的内容
问题描述
在 C++ 中我可以做到
class A
{
public:
A(std::vector<std::unique_ptr<int>> v) : _v(std::move(v)) {}
private:
std::vector<std::unique_ptr<int>> _v;
}
我怎样才能实现与 ue4 类型(TArray
, TUniquePtr
)类似的东西,即如何移动 的内容TArray
?
完整示例:
#include <cassert>
#include <memory>
#include <vector>
class MyObj {};
class A {
public:
A(std::vector<std::unique_ptr<MyObj>> v) : _v(std::move(v)) {}
auto GetV() { return _v.front().get(); }
private:
std::vector<std::unique_ptr<MyObj>> _v;
};
int main() {
auto v = std::vector<std::unique_ptr<MyObj>>();
v.push_back(std::make_unique<MyObj>());
A a(std::move(v));
assert(a.GetV());
}
解决方案
完成布伦南的回答:
C++ std -> UE4 等价物:
std::vector
->TArray
std::unique_ptr
->TUniquePtr
std::make_unique
->MakeUnique
std::move
->MoveTempIfPossible
(用于MoveTemp
获取右值和常量的编译时检查)
所以上面带有原生 UE4 类的代码示例看起来像
class MyObj {};
class A {
public:
A(TArray<TUniquePtr<MyObj>> v) : _v(MoveTemp(v)) {}
auto GetV() { return _v[0].Get(); }
private:
TArray<TUniquePtr<MyObj>> _v;
};
int main() {
auto o = MyObj{};
auto v = TArray<TUniquePtr<MyObj>>();
v.Add(MakeUnique<MyObj>(o));
A a(MoveTemp(v));
assert(a.GetV());
}
推荐阅读
- java - Java 服务器应用程序写入 Err 流而不是日志文件
- javascript - Javascript:按比例“缩放”数字数组以求和一个值
- java - 我可以使用哪些 mime 类型通过 Google Drive api 导出 Google 协作平台、Google 表单和 Google 脚本?
- python - 使用 %s 运算符在 Python 中创建 MySQL 数据库
- c# - 如何在 Slack C# 中上传多个附件
- django - django 通道如何与其他微服务通信?
- php - 如何使用 Laravel 5.8 显示图像?
- javascript - 为什么 Vue 使用它的“就地补丁”,尽管我在 v-for 循环中绑定了一个键?
- python - 无法使用 jinja2 加载模板
- java - 如何在 Eclipse 中使用 GraalVM (SubstrateVM) 将 Java 编译为 Native