0

コード内の .SO 'plugin' ファイルから関数をロードしています。プラグインは 3 つの非常に具体的な関数を定義します。各関数の完全な API は事前に定義されています (要点は、同じプログラムの異なるインスタンスが異なるプラグインを使用して動作を変更できるようにすることです。使用量が多いためです)。 、速度の必要性、および私の一般的な怠惰 私は、さまざまなオブジェクトに関数ポインターを渡すのではなく、プラグイン関数を格納できる静的関数ポインターを使用することにしました。

プラグインが存在しない可能性があります。その場合、プラグインから読み取られる関数の代わりに、本質的に「ノーオペレーション」関数を実行したいと考えています。一般的な安全のために、静的関数ポインターがノーオペレーション関数を指していることを確認したいと思います。

どういうわけか、私はこれを行うことができないようです。.h ファイルで no-op 関数を定義し、それに関数ポインタを割り当てようとすると、.h で関数を定義するためのあらゆる種類のエラーが発生します。.h でメソッドのプロトタイプのみを宣言し、関数ポインターをプロトタイプに割り当てようとすると、関数が .cpp ファイルで定義されていても、宣言されていない関数例外が発生します。

関数ポインターを main() 関数の no-op に簡単に割り当てることができることはわかっています。しかし、私 (または後で誰か) が main() メソッドで適切に割り当てなくても、.H ファイルがデフォルトでノーオペレーション関数になるようにする方法はありますか?

4

1 に答える 1

3

ヘッダー (たとえば、PluginInterface.h):

extern void (*my_plugin_function_ptr)(...);

ソース (たとえば、PluginInterface.cpp):

#include "PluginInterface.h"

static void default_plugin_function(...) {/* does nothing */};

void (*my_plugin_function_ptr)(...)=&default_plugin_function;
于 2012-07-12T19:28:13.240 に答える