関数へのポインタが必要です。
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 (...);
}
自由に const の正確性を導入しましたOnJoin
。
また、C++ のタイプ セーフ メカニズムのほとんどをバイパスする を返すのvoid*
ではなく、実際のオブジェクトまたは別のインターフェイスへのポインターを返すことも検討する必要があります。
最後に、new
(anddelete
が欠落しているため、メモリ リークが発生します) を使用することは、お粗末な方法です。代わりに、スタックに物を割り当てるか、動的な割り当てが本当に必要な場合はスマート ポインターを使用することをお勧めします。