私の現在のプロジェクトの 1 つで、多数の実装があるインターフェイスが定義されています。これは、多くのプラグインを備えたプラグイン インターフェイスと考えることができます。
これらの「プラグイン」はそれぞれ、ネットワーク プロトコルで異なるメッセージ タイプを処理します。そのため、新しいメッセージを受け取ると、プラグインのリストをループし、誰がそれを処理できるかを確認し、インターフェイスを介して呼び出します。
私が苦労している問題は、すべての実装を配列/ベクトル/その他に割り当て、初期化、および「ロード」する方法です。
現在、main() ですべての「プラグイン」を宣言してから、「plugin_manager.add_plugin(&plugin);」を呼び出しています。それぞれについて。これは理想的とは言えません。
実際の質問: 1. この種のことに対する標準化されたアプローチはありますか? 2. プラグインがプリロードされた配列 (グローバル?) を定義する方法はありますか? 3. 私はこれについて完全に間違った方法で行っていますか? この種の問題に対する他の (より良い?) アーキテクチャ オプションはありますか?
ありがとう。
編集:
これはコンパイルされます(醜いコードを許してください)...しかし、ハックのようです。一方、割り当ての問題を解決し、main() をクリーンアップします...これは有効な解決策ですか?
class intf
{
public:
virtual void t() = 0;
};
class test : public intf
{
public:
test(){}
static test* inst(){ if(!_inst) _inst = new test; return _inst; }
static test* _inst;
void t(){}
};
test* test::_inst = NULL;
intf* ints[] =
{
test::inst(),
NULL
};