你需要一個指針到函數:
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)。 –