私はサウンドライブラリ(OpenALを使用)に取り組んでおり、FMODが提供するインターフェイスからインスピレーションを得て、インターフェイスat this linkを見ることができます。このコードはプライベートコンストラクタのみを持つクラスのインスタンスをどのように作成しますか?
Sound、Channel、ChannelGroupのようないくつかの概念を提供していますが、FMODインターフェイスからわかるように、それらのクラスにはすべてプライベートコンストラクタがあります。たとえば、Soundを作成する場合は、 Systemクラスが提供するcreateSound()(ChannelまたはChannelGroupを作成する場合は同じ)。
私は同様のメカニズムを提供したいと思いますが、それがどのように背後にあるのか分かりません。たとえば、関数はどのようにしてcreateSound()サウンドの新しい兆候を作成できますか?コンストラクタはprivateであり、Soundインターフェイスからは静的メソッドや友好関係はありません。いくつかのパターンが使われていますか?
編集:OPの質問を明確にするために、プライベートコンストラクタを使用してクラスのインスタンスを作成する方法を質問していません。質問はリンクに掲載されています。静的メソッドやフレンド関数はありません。
ありがとうございました。
touさんが友だちのメンバーを使用しようとしました – zabulus
そのインターフェイスはやや劣っています。一般に、「システム」クラスまたは「神」クラスは、アンチパターンとして知られています。 – MSalters
publicまたはfriendコンストラクタを持ち、それを返すサブクラスのインスタンスを作成していますか? – jcoder