【发布时间】:2018-07-10 23:19:52
【问题描述】:
我使用 try{} catch(){} 来处理返回模板类型的函数中的错误。
T get (int iOffset) const
{
try {
checkIndex(iOffset);
}
catch (char const* msg) {
std::cout << msg << std::endl;
}
int index = (m_iReadIdx + iOffset) % m_iBuffLength;
float a = m_ptBuff[index];
return a;
}
该函数将首先调用checkIndex 来检查输入是否超出范围,如果超出则抛出错误。
但是,如果checkIndex 抛出错误,我不希望外部get 返回任何值,因为返回的值可能被其他函数使用或打印不正确。如果我在 catch 块中放一个 return,我不知道要返回什么,因为它是一个模板。如果我不这样做,catch 块后面的代码仍然会被执行并因此返回一个值。
有没有办法做到这一点?我是 C++ 新手,想知道在这种情况下人们通常如何处理错误?谢谢!
【问题讨论】:
-
只是不要捕获那个异常,或者抛出一个新异常
-
OT:不要抛出字符*。总是抛出从 std::exception 派生的东西。捕获为 const &。使用 std::runtime_error 获取处理 std::string 消息的异常。
标签: c++ templates error-handling