C++ 专门化向下转换的解决方法
我试图为C模块构建一个包装器。C模块将进行一些CAN通信。要读取某些内容,有一个read函数,其中传递回调函数指针 我的想法是创建一个调用方类,示例类a中的其他类可以从中继承。我现在在comand readObject的函数a::req中遇到了一个问题。为了没有编译器错误,我必须进行静态转换,但在执行过程中,程序将无法正常工作。我已经读到,在特殊应用中的沮丧可能是危险的。我想我的错误就来自于此 我怎样才能解决我的问题?有什么想法吗?是否有我需要检查的设计模式 谢谢C++ 专门化向下转换的解决方法,c++,C++,我试图为C模块构建一个包装器。C模块将进行一些CAN通信。要读取某些内容,有一个read函数,其中传递回调函数指针 我的想法是创建一个调用方类,示例类a中的其他类可以从中继承。我现在在comand readObject的函数a::req中遇到了一个问题。为了没有编译器错误,我必须进行静态转换,但在执行过程中,程序将无法正常工作。我已经读到,在特殊应用中的沮丧可能是危险的。我想我的错误就来自于此 我怎样才能解决我的问题?有什么想法吗?是否有我需要检查的设计模式 谢谢 class A : publi
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;
}
您是否忘记了包装器::readObject中的this?您是对的,在复制到stackoverflow时丢失了this。但这不是真正的问题。请提供编译后不能正常工作的代码。“对我来说。”马特,这正是我提出这个建议的原因。不能使用static_cast将void*直接强制转换为派生类,首先需要将void*强制转换为基类指针,然后将此void*强制转换为派生类指针。