我有一个错误列表,如下所示:
"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。但我似乎无法使其正常工作。
答案 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";
}
答案 1 :(得分:1)
我认为标准模板库的课程模板unordered_map或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;
}
希望这会对你有所帮助。