インターフェイスの制限により、static_castを使用してMyObject*
をvoid*
にキャストする必要があります。このポインタを後のインターフェイス呼び出しに戻すときは、void*
からMyObject*
まで別のstatic_castを実行する必要があります。この場合、dynamic_castは機能しません(hereを参照)。static_castの後にタイプセーフティチェックを実行する方法はありますか?
しかし、他の人がコードの一部を変更しても奇妙なことが起こらないように、型安全性チェックを実行したいと思います。この案内所の下で実行できるチェックがある場合は、どれが最も便利なものでしょうか?
いいえ、 'MyObject *'を 'void * 'に変換するために' static_cast'を使う必要はありません。それは暗黙的な変換です。はい、 'void *'から 'MyObject *'に戻るために 'static_cast'を使う必要があります。 –
コールバックサブミッションとコールバック関数の間のリンクを示すコードコメントは、通常、メンテナに型情報の更新を思い出させるのに十分です。人々があなたのコードで間違っている場合は、ビルド中に実行するスクリプトを書いて、一致するタイプを確認してください。 –
また、型システムを使用して、各コールバックのtypedefを作成し、両者でそれを使用することで、これを保証することもできます。 'async_lookup'関数を持っていれば、' typedef DictionaryEntry async_lookup_cb_type'を宣言できます。 –