2011-10-24 17 views
3

我目前正在將我的代碼從舊式枚舉遷移到枚舉類。C++ 11:什麼是從舊式枚舉遷移到枚舉類的正確方法?

強打字很好,但我碰到了代碼中的一處,我需要調用ncurses的init_pair()函數,它將short int作爲其第一個參數,但我已將其轉換爲開發人員的enum類友好的閱讀。

使編譯器高興,看來我需要在第一個參數使用static_cast<short int>()

是否有一個更簡潔的方法,或者如果我必須使用的static_cast,你怎麼建議我使用它嗎?

接受的答案:多德的回答是好。在轉換之前,我已經遍佈代表舊式枚舉的地方。在切換之後,我在其餘的代碼中都有一個帶有類型安全枚舉的髒轉換。骯髒是孤立的一個點,代碼更安全,並且它更容易閱讀。這是一個顯着的進步。

回答

7

最徹底的方法可能是定義init_pair的重載線版本,它接受一個枚舉且將其調用普通版:

inline int init_pair(enum_type pair, short f, short b) { 
    return init_pair(static_cast<short>(pair), f, b); 
} 

這樣,用戶就可以與你怎麼稱呼它枚舉類型,它會只是工作

+1

好主意 - 至少髒物被隔離到一個地方 - 我將包裝外部調用 – kfmfe04

+1

作爲一個說明,'短(對)'和'(短)pair'會工作得很好,如果你只是想避免醜陋;另一方面,與C風格和函數風格的演員不同,static_cast確實具有易於搜索的優勢! – celticminstrel

3

有沒有更乾淨的方法來做到這一點,或者是static_cast好嗎?

清潔?你正在做一些不潔的事情:採取強類型的價值,並將其改爲另一種類型。你故意繞開類型系統。當你做不潔淨的事時,它應該看起來不潔淨。

唯一的「清潔」的方式來做到這一點是與C風格的轉換。我不確定這是否「更清潔」。

+0

不幸的是,init_pair()是一個外部庫調用,所以我不能修改該接口 – kfmfe04

+0

Chris Dodd的建議是正確的 - 將髒代碼隔離爲一個點並嚴格使用整個代碼庫中的enum_type。 – kfmfe04