您需要一个指向函数的指针:
void* (*OnJoinFn)(char*, char*);
在你的Irc
课堂上,
class Irc
{
public:
OnJoinFn onJoin;
};
这可以像您在上面所做的那样分配:
int main()
{
Irc irc(stuff);
irc.onJoin = join;
}
但我想知道,如果你只是学习 C++,你真的需要一个指向函数的指针吗?指向函数的指针当然是合法且有效的,但它是一个不寻常的实体,我通常希望使用其他一些机制。首先,我建议研究抽象基类:
class IIrc
{
public:
virtual void* OnJoin(const char*, const char*) = 0; // pure virtual
virtual ~IIrc() {}; // Don't forget to implement a virtual destructor in any ABC
};
class MyIrc
:
public IIrc
{
public:
void* OnJoin(const char* sender, const char* channel*)
{
// YOUR CODE HERE
}
};
int main()
{
IIrc* irc = new MyIrc;
irc->OnJoin (...);
}
我冒昧地在OnJoin
.
您还应该考虑不返回 a void*
,它绕过了大多数 C++ 的类型安全机制,而是一个指向实际对象或另一个接口的指针。
最后,使用new
(and delete
,这里缺少,导致内存泄漏) 是不好的做法。相反,更喜欢在堆栈上分配东西,或者,如果您真的需要动态分配,请使用智能指针。