我想将一个函数存储为类成员并在类中调用它?非常像回调函数。我的班级画了一份文件,但每个文件都必须画出不同所以我想将一个函数(在类之外编写)分配给类的一个成员,然后在我想绘制文档时调用它。
此函数主要负责根据每个特定文档转换对象。
这是我的班级:
class CDocument
{
public:
CDocument();
~CDocument();
void *TransFunc();
}
void Transform()
{
}
int main()
CDocument* Doc = new CDocument();
Doc->TransFunc = Transform();
}
我知道这可能是一个简单的问题,但我无法通过Google搜索或搜索来找到答案。
答案 0 :(得分: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.
}
答案 1 :(得分:2)
您需要使用 Pointer to member function 。
typedef void (CDocument::*TransFuncPtr)();
然后您可以将TransFuncPtr
用作类型。
使用您的编辑您似乎只需要指向免费功能的指针。
这是 small working sample。
#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;
}
答案 2 :(得分:0)
C语言继承的C声明语法很棘手。
您的声明
void *TransFunc();
实际上与
相同void* TransFunc();
声明一个返回指针的函数,而不是指向函数的指针。
要使*
绑定到声明的名称而不是类型,您必须使用一组额外的括号
void (*TransFunc)();