gpt4 book ai didi

c++ - 将 vector> 转换为 vector>

转载 作者:行者123 更新时间:2023-11-30 01:08:49 26 4
gpt4 key购买 nike

如何转换vector<unique_ptr<T>>vector<unique_ptr<const T>>

使用 reinterpret_cast 的任何缺点?在 C++11 及更高版本中推荐的方法是什么?

vector<unique_ptr<const T>> Get() {
vector<unique_ptr<T>> some;
...
// Any better way to do this?
return *(reinterpret_cast<vector<unique_ptr<const T>>*>(&some));
}

最佳答案

您可以通过将旧 vector 的内容移动到其中来构造一个新 vector :

#include <iterator>
#include <memory>
#include <vector>

std::vector<std::unique_ptr<T>> v; // ...

std::vector<std::unique_ptr<const T>> cv(
std::make_move_iterator(v.begin()),
std::make_move_iterator(v.end()));

您提议的 reinterpret_cast 会导致未定义的行为。

您的问题的一般主题是,您正在尝试查看一个事物的资源管理处理程序,就好像它是另一个相关事物一样。这是一个有问题的概念,因为处理程序确实需要知道它到底在处理什么,而它在某种程度上忽略了这一点。您真正想要做的是传达对已处理 事物的看法。在当前上下文中,您可能会使用已处理的东西,一个 T 指针,并使用通常的语言规则将 that 转换为 const T 指针,它按预期工作并避免谈论处理程序对象(唯一指针)。

关于c++ - 将 vector<unique_ptr<T>> 转换为 vector<unique_ptr<const T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com