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'”