C++ 专门化向下转换的解决方法

C++ 专门化向下转换的解决方法,c++,C++,我试图为C模块构建一个包装器。C模块将进行一些CAN通信。要读取某些内容,有一个read函数,其中传递回调函数指针 我的想法是创建一个调用方类,示例类a中的其他类可以从中继承。我现在在comand readObject的函数a::req中遇到了一个问题。为了没有编译器错误,我必须进行静态转换,但在执行过程中,程序将无法正常工作。我已经读到,在特殊应用中的沮丧可能是危险的。我想我的错误就来自于此 我怎样才能解决我的问题?有什么想法吗?是否有我需要检查的设计模式 谢谢 class A : publi

我试图为C模块构建一个包装器。C模块将进行一些CAN通信。要读取某些内容,有一个read函数,其中传递回调函数指针

我的想法是创建一个调用方类,示例类a中的其他类可以从中继承。我现在在comand readObject的函数a::req中遇到了一个问题。为了没有编译器错误,我必须进行静态转换,但在执行过程中,程序将无法正常工作。我已经读到,在特殊应用中的沮丧可能是危险的。我想我的错误就来自于此

我怎样才能解决我的问题?有什么想法吗?是否有我需要检查的设计模式

谢谢

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*强制转换为派生类指针。