İnt numaralama atama için genel yolu C
Genel C
enum
int
döküm var mı?
int
enum
bir değer döndürmesi gerekir enum
bir aralıkta, aksi takdirde exception
Bir at. Bir şekilde yazmak varjenerik? 8* *birden fazla desteklenmeli.
Arka plan: bir dış varnumaralamayazın vehiçbir kontrolükaynak kod üzerinde. Bir veritabanı bu değeri saklamak ve almak istiyorum.
CEVAP
Açık bir şey senin numaralama açıklama için:
// generic code
#include <algorithm>
template <typename T>
struct enum_traits {};
template<typename T, size_t N>
T *endof(T (&ra)[N]) {
return ra N;
}
template<typename T, typename ValType>
T check(ValType v) {
typedef enum_traits<T> traits;
const T *first = traits::enumerators;
const T *last = endof(traits::enumerators);
if (traits::sorted) { // probably premature optimization
if (std::binary_search(first, last, v)) return T(v);
} else if (std::find(first, last, v) != last) {
return T(v);
}
throw "exception";
}
// "enhanced" definition of enum
enum e {
x = 1,
y = 4,
z = 10,
};
template<>
struct enum_traits<e> {
static const e enumerators[];
static const bool sorted = true;
};
// must appear in only one TU,
// so if the above is in a header then it will need the array size
const e enum_traits<e>::enumerators[] = {x, y, z};
// usage
int main() {
e good = check<e>(1);
e bad = check<e>(2);
}
Dizi e
yazarı yok eğer bir sıkıntı olan e
ile güncel tutulmaları gerekir. Sjoerd dediği gibi, muhtemelen herhangi bir iyi inşa sistemi ile otomatik olabilir.
Her durumda, 7.2/6 karşı karşıya olduğunu:
Emin olduğu bir sıralama için en küçük numaralandırıcısı ve giyer bağlıdır. en büyük, numaralandırma değerleri temel türü değerleri aralığı için bmin bmax, nerede bmin ve bmax, sırasıyla. bu en küçük ve en büyük değerleri en küçük bit-alan emin saklayabilirsiniz ve giyer bağlıdır. Olası bir tanımlamak için değerleri olan numaralandırma onun sıralayıcısını herhangi biri tarafından tanımlanan.
Eğer öyleyse e
, yazarı değilse olabilir veya e
geçerli değerler aslında tanımı görünen bir garanti olmayabilir.
Genel yöntem oluşturmak bir Numaralama...
Numaralama türleri değişkenler C olara...
geçici numaralama genel bir kısıtlama ...
AngularJS genel klavye kısayolları olu...
JavaDoc Java bir belge numaralama için...