for*_*idt 0 c++ enums boost integer
我创建了一个CMyClassCTor采用UCHARas参数的类.该参数可以具有各种枚举的值(都保证适合a 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);
Run Code Online (Sandbox Code Playgroud)
上面的代码CMessage用两个枚举成员中的每一个调用CTor,然后将它们放在一个列表中.我的问题是,这段代码在VC++ 9上抛出警告C4244(在从枚举转换为UCHAR期间可能丢失数据).
我目前的解决方案是为每个枚举类型创建一个转换函数:
static UCHAR ToUchar(const SomeEnum eType)
{
return static_cast<UCHAR>(eType);
}
static UCHAR ToUchar(const AnotherEnum eType)
{
return static_cast<UCHAR>(eType);
}
Run Code Online (Sandbox Code Playgroud)
然后上面的代码如下所示:
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));
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我能想到的最干净的方法.
有没有更好的方法?
也许boost有一些不错的东西可供选择?
我不想用pragma语句禁用警告,我无法修改枚举.
我不会在这里通过static_cast进行电子邮件拦截,但如果你是:
template <class T>
inline UCHAR ToUchar(T t)
{
return static_cast<UCHAR>(t);
}
Run Code Online (Sandbox Code Playgroud)
为每个枚举保存写一个函数.