SORU
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 classayrı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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Make:

    Make:

    23 Mart 2006
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013