需求
求解器老报错,还得找错误在哪,其实大多数都是一些属性没配置才导致报错,在报错的地方throw出来就能知道具体是哪些错误,把错误编码,这样就能把类似宏这种的返回编码,然后根据编码能查到具体错误信息。
用法
// 定义相关错误
static Error E_NOT_FOUND_PTR(100010001,"未发现指针");
// 响应相关错误
throw E_NOT_FOUND_PTR;
// 查询相关错误并输出
try{
// 生产代码
} catch (Error info) {
cout << "[ERROR] [" << info << "] [" << Error::GetErrorString(info) << "]" << endl;
}
类代码
#include <string>
#include <map>
#include <cassert>
class Error
{
public:
Error(int value, const std::string& str)
{
m_value = value;
m_message = str;
#ifdef _DEBUG
ErrorMap::iterator found = GetErrorMap().find(value);
if (found != GetErrorMap().end())
assert(found->second == m_message);
#endif
GetErrorMap()[m_value] = m_message;
}
operator int() { return m_value; }
private:
int m_value;
std::string m_message;
typedef std::map<int, std::string> ErrorMap;
static ErrorMap& GetErrorMap()
{
static ErrorMap errMap;
return errMap;
}
public:
static std::string GetErrorString(int value)
{
ErrorMap::iterator found = GetErrorMap().find(value);
if (found == GetErrorMap().end())
{
assert(false);
return "";
} else {
return found->second;
}
}
};