Структура данных для списка ошибок

У меня есть список ошибок, который выглядит так:

"ERROR CODE" "POSITION" "Error description""000" "1" "No error""001" "2" "DB Connection error""002" "2" "Error in processing"

и еще много ошибок.

Теперь мне действительно нужно как-то реализовать эти ошибки (ошибки никогда не меняются, они всегда одинаковы), чтобы разработчики, использующие библиотеку, могли легко идентифицировать описание ошибки по заданному ERROR_CODE.

например: char * getError (ERROR_CODE); и вернуть строку описания ошибки, связанной с ERROR_CODE.

Я думал об использовании ENUM. Но я не могу заставить его работать должным образом.

1

Решение

Я думаю, что шаблон класса стандартной библиотеки шаблонов unordered_map или же карта подойдет вашей цели.

Неупорядоченные карты — это ассоциативные контейнеры, в которых хранятся элементы, образованные комбинацией значения ключа и сопоставленного значения, значение ключа обычно используется для уникальной идентификации элемента, тогда как сопоставленное значение является объектом с содержимым, связанным с этим ключом. Элементы в неупорядоченной карте не сортируются ни в каком конкретном порядке ни по их ключу, ни по сопоставленным значениям.

Карты — это ассоциативные контейнеры, в которых хранятся элементы, образованные комбинацией значения ключа и сопоставленного значения, значения ключей обычно используются для сортировки и уникальной идентификации элементов, в то время как сопоставленные значения хранят содержимое, связанное с этим ключом. Внутренне элементы на карте всегда сортируются по ключу.

Контейнеры неупорядоченной карты быстрее, чем контейнеры карты, получают доступ к отдельным элементам по их ключу, хотя они, как правило, менее эффективны для итерации диапазона через подмножество их элементов.

Сохраните свой код ошибки в качестве ключа и структуру (как показано ниже), содержащую описание позиции и ошибки в качестве отображенного значения.

struct error_info{
int position;
char * description;
};

Вот код,

#include <iostream>
#include <map>
using namespace std;

struct error_info{
int position;
char * description;
};

struct error_info get_error(map<int, struct error_info> error_map, int error_code){
return error_map[error_code];
}

int main(){
map<int, struct error_info> error_map;

error_map[000] = {1, (char *)"no error"};
error_map[001] = {2, (char *)"DB connection error"};
error_map[003] = {3, (char *)"error in processing"};

struct error_info info = get_error(error_map, 001);
cout << info.position << " " << info.description << endl;
return 0;
}

Живой пример

Надеюсь, что это поможет вам.

1

Другие решения

Если коды ошибок являются строковыми, то один из способов сделать это — использовать std::map<std::string, std::string>,

#include <map>
#include <string>
#include <iostream>

std::map<std::string, std::string> ErrCodeMap =
{ {"000", "No error"},
{"001", "DB Connection error"},
{"002", "Error in processing"} };

std::string getError(const std::string& errCode)
{
auto it = ErrCodeMap.find(errCode);
if ( it != ErrCodeMap.end() )
return it->second;
return "";
}

int main()
{
std::cout << getError("002") << "\n";
}

Живой пример

Если тип данных является int для кодов ошибок, то std::map<int, std::string> был бы использован.

#include <map>
#include <string>
#include <iostream>

std::map<int, std::string> ErrCodeMap =
{ {0, "No error"},
{1, "DB Connection error"},
{2, "Error in processing"} };

std::string getError(int errCode)
{
auto it = ErrCodeMap.find(errCode);
if ( it != ErrCodeMap.end() )
return it->second;
return "";
}

int main()
{
std::cout << getError(2) << "\n";
}

Живой пример с использованием int

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector