我尝试为C模块构建一个包装器。 C模块将进行一些CAN通信。要读取内容,有一个read()函数,其中回调函数指针与。
一起传递我的想法是创建一个Caller类,其他类(在示例类A中)可以继承。我现在在功能方面遇到了问题" A :: req()"使用命令" readObject()"。为了没有编译器错误,我必须进行static_cast,但是在执行程序期间,将无法正常工作。我已经读过,专业的垂头丧气可能很危险。我想我的错误来自于此。
我怎么能解决我的问题?有任何想法吗?是否有我应该检查的设计模式?
感谢。
class A : public Caller
{
public:
void req()
{
//readObject(&A::specializedCallback); // error from compiler
readObject(static_cast<Caller::CbkPtr_t>(&A::specializedCallback)); // has error during excecution, because of downcast?
}
void specializedCallback(void *data);
}
class Caller
{
public:
typedef void (CanIfcCaller::*CbkPtr_t)(void *data);
readObject(CbkPtr_t cbFcnt)
{
cbkFunction = cbFcnt;
Wrapper::readObject(this):
}
void callbackReadObject(void *data)
{
(this->*cbkFunction)(data);
}
private:
CbkPtr_t cbkFunction;
}
class Wrapper // to C function
{
public:
static void readObject(Caller* theCaller)
{
pCaller = theCaller;
read(&Wrapper::callbackReadObject);
}
static void callbackReadObject(void *data)
{
pCaller->callbackReadObject(data);
}
private:
Caller* pCaller;
}