降低专业化的解决方法

时间:2014-11-07 08:00:33

标签: c++

我尝试为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;

}

0 个答案:

没有答案