需求
求解器老报错,还得找错误在哪,其实大多数都是一些属性没配置才导致报错,在报错的地方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;
- }
- }
- };