繁体   English   中英

如何在类成员中存储函数? (使用函数作为回调)

[英]How to store a function in a member of class? (Using function as callback)

我想将函数存储为类成员,并在类内部调用它? 很像一个回调函数。 我的班级绘制了一个文档,但是每个文档都必须以不同的方式绘制。 因此,我想将一个函数(在类外部编写)分配给该类的一个成员,然后在我要绘制文档时调用它。

此功能主要负责根据每个特定文档转换对象。

这是我的课:

class CDocument
{
public:
    CDocument();
    ~CDocument();

    void *TransFunc();
}

void Transform()
{

}

int main()
    CDocument* Doc = new CDocument();
    Doc->TransFunc = Transform();
}

我知道这可能是一个简单的问题,但是我无法通过谷歌搜索或搜索找到答案。

我认为,这就是您可能想要的。 如有疑问,请与我联系。

class CDocument
{
public:
    CDocument():myTransFunc(NULL){}
    ~CDocument();

    typedef void (*TransFunc)();  // Defines a function pointer type pointing to a void function which doesn't take any parameter.

    TransFunc myTransFunc;  //  Actually defines a member variable of this type.

    void drawSomething()
    {
         if(myTransFunc)
            (*myTransFunc)();   // Uses the member variable to call a supplied function.
    }
};

void Transform()
{

}

int main()
{
    CDocument* Doc = new CDocument();
    Doc->myTransFunc = Transform;  // Assigns the member function pointer to an actual function.
}

您需要使用Pointer成员函数

typedef void (CDocument::*TransFuncPtr)();

然后,您可以将TransFuncPtr用作类型


进行编辑似乎只需要一个指向Free函数指针即可。
这是一个小样本

#include<iostream>
#include<string>

typedef void (*TransFuncPtr)();

class Myclass
{
     public:
     TransFuncPtr m_funcPtr;
};

void doSomething(){std::cout<<"Callback Called";}

int main()
{
    Myclass obj;
    obj.m_funcPtr = &doSomething;
    obj.m_funcPtr();
    return 0;
}

由C ++继承的C声明语法很棘手。

您的声明

void *TransFunc();

实际上与

void* TransFunc();

它声明一个函数返回一个指针,而不是一个指向函数的指针。

要使*绑定到声明的名称而不是类型,您必须使用一组额外的括号

void (*TransFunc)();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM