std :: vector <int>to std :: vector <enum> - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть массив std::vector<int> и enum class Foo : int.Есть ли лучший способ разыграть или преобразовать, чем reinterpret_cast?

std::vector<int> v;
auto& c = *reinterpret_cast<std::vector<Foo>*>(&v);

1 Ответ

5 голосов
/ 26 сентября 2019

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;
}

Ссылка: Как привести int к enum в C ++?

...