0
我創建了一個類CMyClass
,其CTor採用UCHAR
作爲參數。該參數可以具有各種枚舉的值(全部保證適合於UCHAR
)。我需要將這些值轉換爲UCHAR
,因爲庫函數要求其參數爲該類型。將枚舉值轉換爲整數值時,如何避免編譯器警告?
我已經創造了不少的消息對象,並節省打字努力我用boost::assign
:
std::vector<CMyClass> myObjects;
boost::assign::push_back(myObjects)
(MemberOfSomeEnum)
(MemberOfSomeEnum);
std::vector<CMyClass> myOtherObjects;
boost::assign::push_back(myObjects)
(MemberOfAnotherEnum)
(MemberOfAnotherEnum);
上面的代碼調用CMessage
構造函數與每兩個枚舉成員,然後把它們放在名單。 我的問題是,這段代碼在VC++ 9上拋出警告C4244(在從enum轉換爲UCHAR期間可能會丟失數據)。
我目前的解決方案是爲每一個枚舉類型轉換函數:
static UCHAR ToUchar(const SomeEnum eType)
{
return static_cast<UCHAR>(eType);
}
static UCHAR ToUchar(const AnotherEnum eType)
{
return static_cast<UCHAR>(eType);
}
然後上面的代碼看起來是這樣的:
std::vector<CMyClass> myObjects;
boost::assign::push_back(myObjects)
(ToUchar(MemberOfSomeEnum))
(ToUchar(MemberOfSomeEnum));
std::vector<CMyClass> myOtherObjects;
boost::assign::push_back(myObjects)
(ToUchar(MemberOfAnotherEnum))
(ToUchar(MemberOfAnotherEnum));
這是我能想到的最乾淨的方法至今。
有沒有更好的方法?
也許提升有很好的提供?
我不想使用雜注語句禁用警告,我無法修改枚舉。
這將導致不得不每次寫入「ToUchar(SomeEnumMember)」,這將會降低可讀性。這就是我的意思是「乾淨」。 –
foraidt
2009-07-02 12:53:34