【发布时间】:2020-01-26 04:33:08
【问题描述】:
我有一个数组std::vector<int> 和一个enum class Foo : int。有没有比reinterpret_cast 更好的投射或转换方法?
std::vector<int> v;
auto& c = *reinterpret_cast<std::vector<Foo>*>(&v);
【问题讨论】:
-
为什么要转换容器而不是元素?我不确定您是否可以像在此示例中那样使用
reinterpret_cast。 -
如果
reinterpret_cast有效,那只是因为你走运了。访问单个索引时进行强制转换。或者复制向量并复制每个元素并一次投射一个。 -
有一个为此设计的算法函数叫做
std::transform。 -
谢谢,很高兴知道!
-
std::vector<Foo> fv; std::transform(v.begin(), v.end(), std::back_inserter(fv), [&](int n) { return n_converted_to_a_Foo;});-- 简而言之,这就是您可能想要的。它将基于v向量的内容创建一个新的 Foo 向量。如果这是可以接受的,我可以将其发布为答案。