Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在类的成员中存储函数?(使用函数作为回调函数)_C++_Function Pointers - Fatal编程技术网

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

C++ 如何在类的成员中存储函数?(使用函数作为回调函数),c++,function-pointers,C++,Function Pointers,我想将函数存储为类成员并在类内调用它?很像一个回调函数。我的类绘制了一个文档,但每个文档都必须以不同的方式绘制。因此,我想将一个函数(写在类之外)分配给类的一个成员,然后在绘制文档时调用它 此功能主要负责根据每个特定文档转换对象 这是我的班级: class CDocument { public: CDocument(); ~CDocument(); void *TransFunc(); } void Transform() { } int main() C

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

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

这是我的班级:

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

    void *TransFunc();
}

void Transform()
{

}

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

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

你需要使用

typedef void (CDocument::*TransFuncPtr)();
然后可以使用
TransFuncPtr
作为类型


通过编辑,您似乎只需要一个指向自由函数的指针。
这里有一个

#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;
}
#包括
#包括
typedef void(*TransFuncPtr)();
类Myclass
{
公众:
TransFuncPtr mu funcPtr;
};

void doSomething(){std::cout我想,这是您可能想要的。如果您有问题,请与我联系

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.
}

<> C++继承的C声明语法很难。

你的声明

void *TransFunc();
实际上和

void* TransFunc();
它声明了一个返回指针的函数,而不是指向函数的指针

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

void (*TransFunc)();

但是我想从类外分配一个函数。我不想在类内定义我想分配给成员的函数。我应该这样定义我想分配给成员的函数还是类内成员的定义?@Dane:对不起,我不理解你的问题。上面声明了一个poi进入成员函数
CDocument::Transform()我不理解整个内部的对话。如果你能清楚地表达你的意图,也许我能更好地帮助你。抱歉,我解释了我的问题。我不知道这是C++中的一种可能的方式。我想简单地在类外写一个函数,并在其中一个函数中存储一个指向那个函数的指针。类成员,所以稍后我可以在类内调用此函数。它可能类似于C#中的委托或Delphi(Object Pascal)中的事件的概念。@Dane:现在希望我理解你的问题。我更新了答案。非常感谢。这正是我想要做的,只是我现在遇到了错误“当我想将我的函数分配给类memeber”Doc->TransFunc=Transform();“无法从'void'转换为'TransFuncPtr'”