29 Ocak 2013, Salı
Numaralama bir sınıfı temel türü için dönüştürülebilir?
Bir şekilde temel türü için enum class
bir alana dönüştürmek için var mı? Bu otomatik olurdu, ama görünüşe göre değil sanıyordum.
enum class my_fields : unsigned { field = 1 };
unsigned a = my_fields::field;
Bu atama KİK tarafından reddedildi. error: cannot convert 'my_fields' to 'unsigned int' in assignment
.
CEVAP
29 Ocak 2013, Salı
std::underlying_type temel türü olduğunu ve döküm kullanın:
#include <type_traits> //for std::underlying_type
typedef std::underlying_type<my_fields>::type utype;
utype a = static_cast<utype>(my_fields::field);
Bu, gerek yokvarsayalımalttaki yazın ya da enum class my_fields : int { .... }
veya enum class
tanımı etmeye gerek yok.
Bile yazabilirsinizjenerikdönüştürmek mümkün olmalıdır, bu işlevi dönüştürmekherhangi birOnun temel enum class
ayrılmaztürü:
template<typename E>
constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
kullan o zaman:
auto value = to_integral(my_fields::field);
auto redValue = to_integral(Color::Red);//where Color is an enum class!
Ve işlev olarak bildirilmiş beri constexpr
sürekli ifade gerekli yerini kullanabilirsiniz:
int a[to_integral(my_fields::field)]; //declaring an array
std::array<int, to_integral(my_fields::field)> b; //better!
Bu yardımcı olur umarım.
Bunu Paylaş:
Bir Türü kurtarmak için mümkün (kullan...
Neden bir Numaralama temel türü yerine...
Nasıl numaralama oluşturmak için TypeS...
Örtülü dönüşüm numaralandırma türü �...
numaralama başka bir türü için bir num...