gpt4 book ai didi

c++ - 在异常构造函数中参数化错误消息是一种好习惯吗?

转载 作者:行者123 更新时间:2023-11-30 01:46:17 26 4
gpt4 key购买 nike

我想抛出一个异常,其中包含有关导致问题的输入/结果的更多详细信息。然后我可以在捕获这些异常时将有用的错误消息记录到日志中。我在 VS2012 上工作,它还没有实现参数包。所以目前我使用 vsprintf 将可变长度参数合并到字符串中。

  1. 在错误处理阶段使用这样的 printf-like 函数是一种好习惯吗?

  2. 或者只是异常不需要携带这样的详细信息?

异常

class VargException : std::exception
{public:
VargException (const char* fmt, ...)
{
va_list vargs;
va_start(vargs, fmt);
char buf[260] = {};
vsprintf_s(buf, fmt, args);
va_end(vargs);
msgBuilt_ = tryAssign(msg_, buf);
}
const char* what() const {
return msgBuilt_? msg_.c_str(): "Error message failed to build";
}
std::string msg_;
bool msgBuilt_;

// Updated: Avoid dynamic std::string throw exception
bool tryAssign(std::string& msg, const char* buf) throw()
{
try{ msg = buf; return true;}
catch (...) { return false; }
}
};

客户端代码

void func(int key, int len) {
try {
if(notExists(key)) { throw VargException("%d key does not exist", key); }
if(outOfRange(len)) { throw VargException("length %d is out of range.", len); }
HRESULT hr = processSomething();
if(FAILED(hr)) { throw VargException("FAILED to processingSomething. hr: 0x%08X", hr); }
} catch (VargException& e) {
std::cerr << e.what() << "\n";
}
}

最佳答案

在异常创建/处理代码中,您应该对异常更加偏执。

构造一个std::string可以throw.

我会补充说偏执狂,否则接受设计。查找一些标记以检测 2013 模式并发出警告/弃用消息。

关于c++ - 在异常构造函数中参数化错误消息是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com