У меня есть некоторые функции, которые могут возвращать либо успех, либо один из фиксированного набора кодов ошибок.Чтобы идентифицировать коды ошибок, у меня было (что-то вроде) это перечисление старой школы в стиле C, объявленное:
enum {
RESULT_ERROR_BAD_PARAMETER = -3,
RESULT_ERROR_FILE_NOT_FOUND = -2,
RESULT_ERROR_GENERAL = -1,
RESULT_SUCCESS = 0
};
typedef int my_status_t;
my_status_t MyFunc(); // returns a RESULT_* value
Это работало довольно хорошо;шаблон вызова будет выглядеть примерно так:
if (MyFunc() != RESULT_SUCCESS) printf("Error!\n");
... однако было неудобно разрешать неявное преобразование значений my_status_t
в int / bool / и т. д., допуская такие неосторожные ошибки:
// Compiles but does the wrong thing at run-time -- bad!
if (MyFunc() == false) printf("Error!\n");
... поэтому в моей новой редакции кода я преобразовал его в enum class
вместо:
enum class my_status_t {
RESULT_ERROR_BAD_PARAMETER = -3,
RESULT_ERROR_FILE_NOT_FOUND = -2,
RESULT_ERROR_GENERAL = -1,
RESULT_SUCCESS = 0
};
... это прекрасно работает с точки зрения проверки во время компиляции;теперь большинство непреднамеренных продвижений типов перехватываются компилятором, заставляя программиста вернуться назад и сделать это правильно.
Единственное, что меня беспокоит, - это то, что новый синтаксис утомителен: теперь я должен написатьчто-то вроде:
if (MyFunc() != my_status_t::RESULT_SUCCESS) printf("Error!\n");
... на каждом сайте вызова - необходимость набирать my_status_t::
каждый раз утомительна и делает код труднее для чтения, без особого увеличения значения (так как RESULT_SUCCESS
в любом случае достаточно уникален для моих целей)
Мой вопрос: есть ли какая-то директива стиля using namespace my_status_t;
, которую я мог бы использовать, чтобы сказать компилятору экспортировать значения enum из их * 1025?* namespace, чтобы я мог ссылаться на них без необходимости постоянно вводить префикс my_status_t::
?