你需要一个指针到函数:
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
引入const正确性的自由。
您还应该考虑不返回一个void*
,它绕过了大多数C++的类型安全机制,而是一个指向实际对象或另一个接口的指针。
最后,使用new
(和delete
,这在这里丢失,导致内存泄漏)是不好的做法。相反,更喜欢在堆栈上分配内容,或者如果您确实需要动态分配,请使用智能指针。
阅读有关['的std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['的std :: bind'](http://en.cppreference.com/w/cpp /实用程序/功能/绑定)。也有[提升](http://www.boost.org/doc/libs/1_53_0/doc/html/function.html)[变体](http://www.boost.org/doc/libs/1_53_0 /libs/bind/bind.html)。 –