プラグイン/モジュールAPIを提供するシングルスレッドアプリケーションを実装したいと思います。私のアプリケーションは、静的メソッドio_service
を使用して、クラスメソッドでインスタンス化/初期化されています。それはある人によってシングルトンと呼ばれるかもしれません。これをプラグイン実装者が利用できるようにするのは良い考えですか?プラグイン間でboost :: asio :: io_serviceを共有する方法[modules]
boost::io_service& SomeClass::IOS()
{
static boost::io_service ios;
return ios;
}
まず私は、プラグインが唯一のファイル記述子を提供することを可能にすると、アプリケーションがstream_descriptor
オブジェクトとしてそれらを包むと考えますが、これは、ブーストによって提供さio_object
特定の機能を妨げます。これはプラグインの実装者にstatic io_service
を提供し、io_object
インスタンスのみを使用するように制限した理由です。
あなたのapiがboost asioヘッダーを含んでいれば、プラグインはすべて同じ#defines、debug level、ABIなどを使ってコンパイルされます。要するに、おそらくあなたのために働くでしょうし、他の誰かのために不可解に失敗します。 –
この理由から、 'post'と' dispatch'(そしておそらくは鎖のラッパー?)を公開している公共の具体的なクラス(例えばDispatcher)にio_serviceをラップすることを検討することを強くお勧めします。 'std :: function '。 –