2

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

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

这是我的课:

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

    void *TransFunc();
}

void Transform()
{

}

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

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

4

3 回答 3

4

我想,这可能是你想要的。如果您有任何问题,请回复我。

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.
}
于 2012-06-17T09:02:49.800 回答
3

您需要使用指向成员函数的指针。

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

然后你可以TransFuncPtr用作type


随着您的编辑,您似乎只需要一个指向 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;
}
于 2012-06-17T08:44:36.127 回答
0

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

您的声明

void *TransFunc();

实际上是一样的

void* TransFunc();

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

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

void (*TransFunc)();
于 2012-06-17T09:30:34.337 回答