少し低レベルなC++のものを書いていると、OS固有のものを書かなくてはならないことがよくあります。 MessageBox()
関数を例にしましょう(フレームワークはこれを行うので素晴らしい例ではありませんが、それは簡単です)。クロスプラットフォームのC++ ...プラットフォーム固有のコードセクションを1つのファイルに格納するか、または別のクラスに格納しますか?
各プロジェクトがMyApp
のようなカスタムサブクラスを提供するApp
という基底クラスを持っているとします。それぞれのOSに複数のブロック#ifdef
を持つ単一のApp::MessageBox()
メソッドを持つことができます。代わりに、OSクラスのサブクラスが実装を提供する基本クラス/インタフェースを持つこともできます。例:AppWin32 : public App
一方の方法では後者が私にとってはやや似ているが、他方ではMyApp
が正しいOS固有のサブクラスをサブクラス化するようにいくつかの醜いコードを使用しなければならないことを意味する。
もっと良い方法はありますか?
*正しいOS固有の基底クラスをサブクラス化するためにいくつかの醜いコードを使用しなければならない* Uhm ... * ugly *コードは実際に名前を持っています:* Factory *デザインパターン。それは醜いと呼ぶだろう。 –
OS固有の基本クラスのサブクラス化にファクトリパターンがどのように適用されますか? –
@ John:工場は、入力条件(OSなど)に基づいて正しい特定の派生クラスを作成します。顧客は単にThingy :: Create(args)を呼び出し、Createはインスタンス化して戻す派生クラスを把握するためのすべての詳細を処理します。 – Bogatyr