Enum öğelerinin sayısını çıkarmak için bir yol var mı? (Hayali number_of_elements
yöntemiyle)Enum öğelerinin sayısı sabit değer olarak nasıl alınır?
Basit bir örnek:
Normalde yapardım C'deenum FooBar { A = 0, B, C, };
println!("Number of items: {}", FooBar.number_of_elements());
// "Number of items: 3"
...
enum FooBar { A = 0, B, C, };
#define FOOBAR_NUMBER_OF_ITEMS (C + 1)
Buna Pas eşdeğer çalışmıyor Ancak:
enum FooBar { A = 0, B, C, };
const FOOBAR_NUMBER_OF_ITEMS: usize = (C as usize) + 1;
// Raises an error:
// unimplemented constant expression: enum variants
Enumdaki son öğe çok uygunsuz çünkü eşleştirme enumları hata yapacaktır eğer tüm üyeler hesaplanmazsa.
enum FooBar { A = 0, B, C, FOOBAR_NUMBER_OF_ITEMS, };
Enumdaki öğelerin sayısını sabit değer olarak almanın bir yolu var mı?
Not: Bu yol, söz ilişkili olmasa bile, ben bu özelliği istiyordum nedeni sadece bir kez çalıştırmak için mantıklı bir dizi eylem oluşturmak için builder-pattern kullanıyorum olduğunu. Bu nedenle enumun boyutunu sabit boyutlu bir dizi kullanabilirim.
Bunun faydalı olacağını düşündüğüm bir özellik. Sadece ilgi alanı: Neden varyasyon sayısına ihtiyacın var? –
Bu özelliği neden aradığımı açıklayan bir açıklama eklendi. – ideasman42
Dürüst olmak gerekirse, C ve C++ 'da sakıncalı buluyorum çünkü o zaman kodumu kirleten' switch'imdeki durumları ele almam gerekiyor. C ve C + + Ben de yararlı olan bu boyutu da dahil olmak üzere birkaç alternatif şeyler ilan enumlar (siyah sihirbazlık ...) ilan için bir makro kullanarak hile. Sanırım bir pas, Rust'ta da işe yarayacaktı ... ama daha iyi bir şey için umuyordum ... (özel bir türetme muhtemelen hile de yapabilir, sanırım ...) –