我的团队正在开发一个嵌入式系统,我们需要遵循MISRA C++。
我们正在重构代码,以使用更少的虚拟方法,因此我们正在尝试实现CRTP,以使用静态多态而不是动态多态。
但我们遇到了问题,静态多态需要指针转换,因此我们的静态分析检查器会报错。
这是接口:
template <typename T>
class UpdateMethod
{
protected:
~UpdateMethod() {}
public:
void operator()() const
{
// [MISRA Rule 5-2-7] violation:
static_cast<const T*>(this)->update();
}
};
以下是其中一种实现:
class A
: public UpdateMethod<A>
{
public:
void update() const {}
};
当使用MISRA检查器时,如果出现static_cast (conversion from ptr to ptr (e926)的警告,则会有投诉。
所以,我的问题是:是否有任何好的方法来实现CRTP,而不必抑制MISRA警告,从而以安全的方式?
关于指针转换的一个相关问题: MISRA C++ 2008规则5-2-7违规:一个带指针类型的对象不应该直接或间接地被转换为无关的指针类型 在CRTP中我也遇到了同样的错误。
编辑:只使用C++03和没有外部库,例如boost。