にIテンプレートシングルトンを有します。 DLLのC、D及びEは、ロガーを使用して、それは次のようにアクセスされる:C++テンプレートシングルトンは、DLL AではDLL
Singleton<Logger>::instance();
問題は、各DLLは代わりに同じシングルトンインスタンスを使用する
Singleton<Logger>.
の独自のコピーをインスタンス化することです。私はこの問題の解決策がexternテンプレートを使用していることを理解しています。それは、C、DおよびEは
extern template class Singleton<Logger>;
を含める必要がDLLとDLLのBであることは含まれている必要があります
template class Singleton<Logger>;
は、これはまだ複数のテンプレートインスタンスが作成される原因となります。私はすべてのdllにexternを入れようとしましたが、まだ動作しませんでした。すべてのdllからexternを削除しようとしましたが、それでも動作しませんでした。テンプレートシングルトンを実装する標準的な方法ではありませんか?これを行う正しい方法は何ですか?
シングルトンは悪です:http://c2.com/cgi/wiki?SingletonsAreEvil dllでマイニングすると、それらは悪化します。プラグイン(リンクからではなく、動的にロードされたライブラリ)と混合すると、それはさらに狂ってしまいます。 – Bruce
この質問は、複数の権利ではなく、1つのプロセスでのDLLに関するものですか? – Sergei
はい、正しいです。 –