std :: vector <int>到std :: vector <enum>

Dan*_*ens 0 c++ c++11 c++14

我有一个数组std::vector<int>和一个enum class Foo : int。有没有比更好的转换或转换方法reinterpret_cast

std::vector<int> v;
auto& c = *reinterpret_cast<std::vector<Foo>*>(&v);
Run Code Online (Sandbox Code Playgroud)

Una*_*dra 5

https://godbolt.org/z/M6ofkF

static_cast与结合std::transform

#include <algorithm>
#include <vector>
#include <cassert>

enum class Foo : int {
   A = 0,
   B = 1,
   C = 2,
   D = 3,
   E = 4,
   F = 5
};

std::vector<Foo> convert(std::vector<int> const &in) {
  std::vector<Foo> out;
  out.reserve(in.size());

  std::transform(in.begin(), in.end(), std::back_inserter(out),
                 [](int n) { return static_cast<Foo>(n); });
  return out;
}

int main() {
  std::vector<int> vec{1, 2, 3, 4, 5};
  std::vector<Foo> c = convert(vec);

  assert(c[3] == Foo::E);

  return 0;
}

Run Code Online (Sandbox Code Playgroud)

参考:如何在C ++中将int枚举为枚举?