現在、いくつかの表示ライブラリを利用する端末ベースのアプリケーションを開発しています。私のプログラムの流れは次のとおりです。
main.cpp
\ feature1.cpp
|
\feature2.cpp
|
\ feature3.cpp
|
\feature4.cpp
メイン クラスは無限ループにあり、4 つの機能から 1 つを選択できます。選択すると、その機能の無限ループに入り、機能が終了状態に達すると終了します。終了後、プログラムはメイン ループに戻り、別の機能を選択するための入力を再度受信できるようにします。
私が抱えている問題は、main.cpp
ファイルにシグナルを設定して、ターミナル ウィンドウのサイズが変更されたことを検出することです。一定以下になったら何とかしたい。同様に、ユーザーがいる機能ごとに異なることをしたいと思います。シグナル呼び出しは次のようになります。
signal(SIGWINCH, detectResize); //detectResize(int sig) handles resize
シグナルターゲットを、現在開いている機能に対応する正しい機能にするにはどうすればよいですか? もともと、呼び出された各クラスでメソッドを作成しようとしましたが、そのたびに関数handleResize()
を呼び出しsignal()
て正しいクラスに変更していました。例えば:
if(feature1 is selected)
{
signal(SIGWINCH, f1.handleResize);
feature1 f1(); //start feature 1 loop
}
f1.handleResize
オブジェクトを作成する前に渡す方法がわからなかったため、これは機能しませんでした。私は C++ の経験があまりありません。これについてもっと良い方法はありますか?JavaであればResize
インターフェース(C++用のクラス)を作って、各機能を実装させようと考えていました。次に、グローバル変数を介してどの機能が使用されているかを追跡し、 の関数<feature>.handleResize()
から適切な機能を呼び出すことができます。このような可能性はありますか、それとも C++ 用のよりエレガントな方法はありますか?handleResize()
main.cpp