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