Как я могу избавиться от предупреждения, явно не указав enum правильно? Соответствующий стандартам код должен был бы сравниваться с foo::bar::mUpload
(см. here), но явные области действительно длинны и делают черную вещь нечитаемой.Соответствует стандарту для typedef моих перечислений
Возможно, есть другой способ, который не использует typedef? я не хочу изменять перечисление - я его не писал и не использовал в другом месте.
warning C4482: nonstandard extension used: enum 'foo::bar::baz' used in qualified name
namespace foo {
class bar {
enum baz {mUpload = 0, mDownload};
}
}
typedef foo::bar::baz mode_t;
mode_t mode = getMode();
if (mode == mode_t::mUpload) //C4482
{
return uploadthingy();
}
else
{
assert(mode == mode_t::mDownload); //C4482
return downloadthingy();
}
, что если я не хочу изменять перечисление? я не писал его и его использовали в другом месте. –
Единственный способ избавиться от этого предупреждения в этом случае - это указать значения 'foo :: bar :: mUpload' и т. Д. Вы можете сделать свой typedef' typedef foo :: bar mode_t', но, конечно, вы могли бы используйте 'mode_t' везде, где ожидается' foo :: bar' ... –