用于临时错误信息存储的实用工具类
Utility class for temporary error information storage?
我一直在编写一个轻量级框架来包装Windows API,用于个人项目和一些有趣的事情。我认为一个好的设计方法是,每当出现问题时,框架中的每个类都会管理自己的错误信息。我有一个简单的错误类:
class Error
{
public:
struct ErrorData
{
DWORD sysErrCode;
tstring sysErrStr;
SYSTEMTIME localTime;
tstring errMsg;
tstring funcCall;
tstring parentClass;
};
void getErrorData(ErrorData *pErrorData);
Error(const tstring parentClass);
void setErrorData(const tstring errMsg, const tstring funcCall, const bool getSysErr = false);
private:
ErrorData errorData;
void getSystemError(DWORD &sysErrCode, tstring &sysErrStr);
};
我一直纠结于如何将这个类合并到其他类中。继承听起来是错误的,因为对话框类不是Error类。组合听起来更好,对话框类可以有一个Error类。但是,我一直在为每个类编写一个getter函数来检索Error类的信息。尽管这只需要很短的时间来编写,但必须有更好的设计方法。我也不想在每个类中复制和粘贴这些函数。
任何想法都将不胜感激!非常感谢。
您是否考虑过在ErrorData
类中使用异常和throw
?这似乎比继承或组合都要好。
看起来getSystemError
应该是一个没有名称空间的函数,而不是一个成员(看起来它所需要的一切都被传递到了它的参数中)。
首先,我必须建议使用异常进行错误管理。您可以有一个在应用程序中单方面使用的异常类型,也可以创建专门用于特定类的异常类型的层次结构。
如果您不想走这条路,您仍然可以避免为每个类中的错误实现一个特殊的getter函数,您可以非常轻松地使用继承。只需创建一个所有具有错误管理的对象都继承的基类,并在基类中实现一次getter:
class ErrorManager
{
const Error& getError();
void setError( Error& err ); // Or however you would actually set the error
}
class Widget : public ErrorManager
{
// Implementation details
}
Widget w;
w.getError()
虽然你认为继承似乎是错误的,但它确实非常合适。对话框不是错误,这是正确的。但是,它确实有一个错误,您可以使用继承来管理与该错误的交互。因此,您的对话框是一个ErrorManager,因为它使用一个通用框架来管理其错误。
祝你好运!
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 在clang++预处理器中确定gcc工具链版本
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 添加存储在向量中的大整数的函数出现问题
- 用于临时错误信息存储的实用工具类
- 我们应该如何在c++中实现实用工具/助手模块