使用函数而不是宏来抑制 misra 警告

Supress misra warning with function instead of macro

我想问一下是否有一种方法可以使用自定义函数来抑制 misra 警告,而不必到处写 \ Misra Warning Suppression(总是相同的推导)。

我经常在我的代码中的很多地方使用 throw std::runtime_error("Custom Error")。不幸的是,我必须进行 misra 警告抑制。所以我必须在每个 throw std::runtime_error("Custom Error"); 之后添加 \ Misra Warning Suppression。在代码中是这样的:throw std::runtime_error("Custom Error"); \ Misra Warning Suppression。因为我真的必须在任何地方都使用相同的推导,所以我考虑缩短它。

在这里,std::exception 可以是任何错误类型。所以我想过像这样使用宏:

#define EXCEPTION_MISRA( TYPE, MESSAGE ) \
  throw TYPE( MESSAGE) // Use Misra Suppression


int main()
{
    EXCEPTION_MISRA( std::runtime_error, "Custom Error" );
    return 0;
}

不幸的是,对于我的用例来说,宏并不是真正的鸡蛋黄。有什么方法可以使用函数来做同样的事情吗?有点像制作自己的 xyz::throw 函数,在函数的哪个位置添加了 \ Misra Warning Suppression

谢谢!

我不使用 MISRA,但是模板有用吗?像

template<class E> 
[[ noreturn ]] void exception_misra(const std::string& message)
{
    throw E(message); // Use Misra Suppression
} 

这样调用:

exception_misra<std::runtime_error>("Custom Error");