[英]C++ catch error and exit the function
我使用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
来检查输入是否超出范围,如果输入超出范围,则抛出错误。
不过,我不希望外界get
返回任何值,如果checkIndex
抛出一个错误,因为返回值可以由其他功能一起使用或不正确地打印出来。 如果我在catch块中放入退货,则由于它是模板,所以我不知道要退货什么。 如果我不这样做,则catch块之后的代码仍将执行,因此返回一个值。
有什么办法吗? 我是C ++的新手,想知道人们在这种情况下通常如何进行错误处理? 谢谢!
但是,如果checkIndex引发错误,我不希望外部返回任何值,因为返回的值可能被其他函数使用或打印不正确。
您总是可以在登录后重新引发异常
T get (int iOffset) const
{
try {
checkIndex(iOffset);
}
catch (char const* msg) {
std::cout << msg << std::endl;
throw; // Just re-throw the exception
}
int index = (m_iReadIdx + iOffset) % m_iBuffLength;
float a = m_ptBuff[index];
return a;
}
您也可以在这种情况下使用可选的。 此构造的想法之一是指示由于某些错误而无法正确设置值。
std::optional< T > get (int iOffset ) const
{
try {
checkIndex(iOffset);
}
catch (char const* msg) {
std::cout << msg << std::endl;
return std::optional< T >();
}
int index = (m_iReadIdx + iOffset) % m_iBuffLength;
float a = m_ptBuff[index];
return return std::optional< T >( a );
}
使用这样的功能可以如下所示:
auto result = get( someOffset );
if( result )
{
// correct, processing result
}
最简单的方法之一是首先确定:如果get()无法返回“适当的”值,则到底应该返回什么? 在许多情况下,它只是0或-1或其他一些特殊值。 然后代码变得非常简单:
T get (int iOffset) const
{
T a;
try {
checkIndex(iOffset);
int index = (m_iReadIdx + iOffset) % m_iBuffLength;
a = m_ptBuff[index];
}
catch (char const* msg) {
a = special_value_for_errors;
std::cout << msg << std::endl;
}
return a;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.