0

Linux上のC++で記述されたサーバークライアントアプリがあります。クライアントがサーバーに接続すると、サーバーは、クライアントがサーバーコマンドを送信して実行するのを待つスレッドを生成します。コマンドはOSに依存します。クライアントがサーバーと通信しているスレッドは、クライアントが必要とする必要なコマンドを実行するグ​​ローバル関数を呼び出します。したがって、OSに依存するコマンドごとに、クライアントがサーバーに送信して実行する2つの関数が必要です。これらのグローバル関数はすべて、メインスレッド関数と同じヘッダーで定義されています。さまざまなOSのこれらすべての機能が少し面倒になっています。私の考えは、WindowsFuncsとLinuxFuncsと呼ばれる2つのクラスを作成することです。これらのクラスには、クラスが設計されたOSに必要なコマンドを実行する静的メンバー関数があります。

4

1 に答える 1

0

これはスレッドの問題のようには聞こえません。単純な継承を使用できるようです。

次のようなものを使用する

abstract class OSMethods {
  void listDir();
}

class OSMethodsLinux : OSMethods {
  void listDir() { system.exec("ls"); }
} 
class OSMethodsWin : OSMethods {
  void listDir() { system.exec("dir"); }
}

次に、サーバークライアント処理コードには次のようなメソッドがあります

  void accept(Socket s, OSMethods m) {
     s.readCommand();
     m.listDir();  // or whatever
  }

LinuxまたはWinクラスのいずれかを受け入れるために正しいインスタンスを渡すようにしてください。したがって、静的メソッドはありません。

一般的に、賢いことをしているのでない限り、プログラム(メインを除く)に静的メソッドは必要ないことがわかりました。ほとんどの場合、静的メソッドは必要なく、設計の柔軟性が低下します。

于 2010-12-11T02:53:34.460 に答える