I have an array std::vector<int>
and an enum class Foo : int
. Is there a better way to cast or convert than a reinterpret_cast
?
std::vector<int> v;
auto& c = *reinterpret_cast<std::vector<Foo>*>(&v);
I have an array std::vector<int>
and an enum class Foo : int
. Is there a better way to cast or convert than a reinterpret_cast
?
std::vector<int> v;
auto& c = *reinterpret_cast<std::vector<Foo>*>(&v);
Combine a static_cast
with 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;
}
Reference: How to cast int to enum in C++?