İki enum arasında dönüştürmek için bir cast operatörüne aşırı yüklenmenin bir yolu var mı? Benim kodİki enüm arasındaki yükleniciye aşırı yüklenme operatörü
Ben
enum devStatus
{
NOT_OPERATING,
INITIALISING,
DEGRADED,
NORMAL
};
enum dataStatus
{
UNAVAILABLE = 1,
DEGRADED,
NORMAL
}
sahip olduğu KULLANILAMIYOR için NOT_OPERATING ve başlangıç durumuna haritası; DÜZELTİLDİ ve NORMAL düz bir şekilde eşleyin. Bunlar harici arayüzlerle sabitlenmiştir.
Ben devStatus
ve dataStatus
arasında dönüştürmek için bir yol arıyorum ve böyle bir şey yazabilmek istiyorum:
devStatus devSts;
getDeviceStatus(&devSts);
dataStatus dataSts = (dataStatus)devSts;
Bunları sınıflar olsaydı, ben bunu yapmak devStatus::operator dataStatus()
yazabilirsiniz biliyoruz. Bunu bir enum için yapmanın bir yolu var mı?
Sadece dönüşüm operatörleri yalnızca sınıf, yapı ve birlik bildirimleri içinde bildirilebilir, C++ ücretsiz bir fonksiyonu dataStatus devStatus2dataStatus(const devStatus& desSts)
ne gibi avantajlar/yerine her enum için bir sınıf tanımlama disadvantes ve dönüşüm operatörleri nelerdir? Aşağı yönde daha fazla boilerplate kodu. Dış ad alanının etrafında yüzen hiçbir dönüşüm fonksiyonu yok - yine de enumlar zaten orada etrafında yüzen olduğunu söylemişti. Verimlilik derleyici optimizasyonu ile aynı olmalıdır. –
C++ enums için isim belirleme ideal değildir, ancak her bir enum için bir sınıf oluşturma tavşan delik aşağı gitmek zorunda kalmadan, enum bildirimi ve bir isim alanı ile dönüşüm işlevi sarma tarafından kolayca önlenebilir. Bu yola gitmek, is-a/has-a ilişkisi gibi mantıksal konuları ve hangi işleçlerin tür için sağlaması gerektiğini belirtmektedir. Sanırım bunu yapmak çoğu numara için muhtemelen çok fazla. –
Yanıtı örnek ad alanı beyanı ve örnek kullanımı ile güncelledim. –