У меня есть класс с функцией Load()
, например.C++ 11 код ошибки возврата из функции
class DB {
private:
pt_db *db;
public:
DB(const char *path);
Write(const char *path);
int Load(const char *path);
};
И я хочу, чтобы вернуть некоторые из состояния Load()
функции в зависимости от переданного аргумента.
Например:
Load(<correct path to the file with valid content>) // return 0 - success
Load(<non-existent path to file>) // return 1
Load(<correct file path, but the content of the file is wrong>) // return 2
Но также я беспокоиться о:
Тип безопасности - я имею в виду, я хочу, чтобы вернуть какой-то объект, который может быть использован только в качестве кода состояния.
int res = Load(<file path>); int other = res * 2; // Should not be possible
Использовать только предопределенные значения. С
int
я могу вернуться, по ошибке, некоторые другие состояния, какreturn 3
(давайте предложить что-то не так произошло вLoad()
функции), и если я не ожидаю этот код ошибки будет передано:int res = Load(<file path>); if(res == 1) {} else if (res == 2) {}; ... // Here I have that code fails by reason that Load() returned non-expected 3 value
Использования лучшим C++ 11 об этом.
Может ли кто-нибудь помочь?
Будет ли ['enum class'] (http://en.wikipedia.org/wiki/C%2B%2B11#Strongly_typed_enumerations) сделать это? – BoBTFish
Исключения - это обычный способ подавления сигнала. Они имеют то преимущество, что вы не можете (случайно) игнорировать их и принимать на себя успех, и они могут кодировать столько информации, сколько захотите. –
Я просто хочу знать некоторые возможные решения. Почему у C++ 11 есть std :: error_code? Также я предлагаю, чтобы этот код можно было использовать в C-коде, а C не может обрабатывать исключения. – likern