Я создал класс 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
CTOR с каждым из двух членов перечислений, а затем помещает их в список. Моя проблема заключается в том, что этот код выдает предупреждение C4244 (возможная потеря данных во время преобразования из перечисления в UCHAR) на VC++ 9.
Мое текущее решение создать функцию преобразования для каждого типа перечислений:
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));
Это самый чистый подход, который я мог думать так далеко.
Есть ли лучшие способы?
Может быть, у boost есть что предложить?
Я не хочу отключать предупреждения с инструкциями прагмы, и я не могу изменить перечисления.
Это приведет к необходимости писать «ToUchar (SomeEnumMember)» каждый раз, что было бы менее читаемым. Вот что я имел в виду с «чистым». –
foraidt
Нет, аргумент шаблона выведен: ToUchar (SomeEnumMember) – fizzer
Извините, вы правы! Я должен был попробовать это, прежде чем писать комментарий ...: -/ – foraidt