C++でクラスへのコールバックを行う最もクリーンな方法は何ですか?C++ 11ではなくC++でコールバックを行う最もクリーンな方法は?
私は通常のような関数を作成:
void registerCallback(void(*callback)(void* param), void* param);
そして、このようなようにそれを呼び出す:
foo->registerCallback(callbackStatic, this);
それから私は、このようなように私のクラスの静的関数を追加します。
static void callbackStatic(void* param)
{
((Type*)(param))->callback();
}
それは動作しますが、それは痛みです。コールバックごとに2つの関数を作成する必要があります。私がC++ 11を使うことができたら、代わりにラムダを使うでしょう。 Qtは非常に優れた信号とスロットのメカニズムを持っていますが、特別なプリコンパイラが必要です。
私はライブラリを作成していますので、要件を可能な限り低くしたいと思います。いいえC++ 11、ブーストなしなど.C++ 03だけを使ってlambdaやシグナル/スロットのようなコールバックシステムを構築する方法はありますか?
C++ 11は本当に大きな障壁ですか?これは標準化されていなくても5年間標準であり、コンパイラはサポートされています。また、移動セマンティクスのためにコードをより効率的にすることができます。 – NathanOliver
@ NathanOliver残念ながら、いくつかの企業にとってはそれが可能です。ミッションクリティカルな操作のコードがVS 2008のみに依存していることに驚かれるでしょう。 –
@RawN私はそれを知っていますが、ほとんどの場合、アップグレードによって有効にならない新機能と同様に完全にテストする必要があるため、このライブラリを使用することはありません。 – NathanOliver