2

私は一種の初心者であり、c++で主にグローバル関数とvoid関数を使用する10000行のプログラムを書き始めました。

とにかく、私のプログラムにはGUIがないので、Clutterを使用してGUIを作成しています。そのため、雑然とすると、信号処理機能を使用して、ボタンのクリックやモーションイベントなどを接続します。

信号処理機能は、1つのユーザーデータパラメータのみを受け入れることができます。ただし、GUIの多くのコンポーネントでは、さまざまな機能から数百にアクセスする必要があります。したがって、すべてのGUIオブジェクトを単一の構造体に配置し、すべての信号処理関数から渡します。

だから私のプログラムは今のところ、(コンソールプログラム)は何かをするためにいくつかの文字を押して印刷します。その文字を押すと、特定の機能を起動します。グローバルの使用を排除する場合、これらの変数のいくつかをパラメーターとして渡す必要があります。

コードをGUIに直接挿入すると、シグナルハンドラー関数は適切な関数を起動しますが、渡すことができるのは1つのユーザーデータパラメーターのみです。これは、現在のように、数百のGUIメンバーを持つ構造体として既に使用されています。

申し訳ありませんが、これがすべておかしなことに聞こえる場合。より良い方法を使用するためにコードを書き直そうとしているだけですが、10000の長いコードといくつかのことについての理解の欠如により、私はかなり圧倒されていると感じています。

GUIに接続することで認識しているこの問題のどこから始めて、どのように対処するかについてのアドバイスを探しています。

そして、構造体についての私の質問です。構造体内に含めることができる要素の最大数があるかどうかを知りたいです。構造体内に配列がある場合、その配列へのアクセス時間は遅くなりますか?構造体のメモリの処理方法に違いはありますか?

ありがとう。

4

2 に答える 2

1

あなたの質問には隠された質問があると思います:GUIアプリケーション/フレームワークを書く方法は?

クラッターは、私がすぐにグーグルで検索したものからは非常に低いレベルのようです。多くのコーディングをスキップしたい場合は、OpenGL(またはGTK +、必要なライセンスの種類によって異なります)を使用してほとんどのものをレンダリングするQtFrameworkのようなものを使用してください。

多かれ少なかれゼロから書きたいのであれば、簡単な答えはありません。私はそれを非常に高いレベルで調べて、それが通常どのように機能するかという非常に基本的な考えを強調するようにします。

C ++タグでタグ付けしたので、適切なC++の方法はクラスを使用することです。

デコード、エンコードなどのメソッドを備えたサウンド(MP3)などのクラスがあります。次に、onPaint、onClickなどのメソッドを備えたGUI要素のクラスがあります。

ボタンが欲しかったとしましょう。これは、x、y、width、height、text、clickHandler、enabledなどの変数を持つクラスになります。onPaint、onClickなどの低レベルのイベントハンドラーがあります(これは、マウスがボタンの上にあるかどうか、ボタンが有効になっているかどうかをチェックし、これらすべてのチェックに合格すると、clickHandlerを呼び出します)。isEnabled()、disable()、enable()などのメソッドも含まれる場合があります。

これで、必要な数のボタンインスタンスを自由に作成でき、それぞれに独自の状態(有効または無効、テキスト、幅、高さ、これらすべて)があります。ボタンごとにclickHandlerを設定します。

いくつかのグローバルが存在する予定ですが、内部のもののほとんどはクラス内にあります。ある種の階層がある場合、そのようなウィンドウには多くのボタンがあり、Windowクラスにはボタンのリストがあります。また、非常に密接に関連する複数のクラスがない限り、クラスはそれぞれ新しいファイルに含める必要があることを忘れないでください。

しかし、実際には、これを何も書きたくないでしょう。すでにそれを行っている巨大なライブラリがあるからです。

すべてを接着する方法については、選択した特定のフレームワークで使用されている規則に従うことをお勧めします。Windowsを使用していて、Windowsのみのアプリケーションにしたい場合は、WPF(またはWinforms)を使用してください。Qtはクロスプラットフォームのものに最適で、非常に近代的ですが、商用アプリを作成している場合、ライセンスには少し制約があります。

于 2012-02-04T23:43:06.897 に答える
0

構造体内の要素へのアクセスは、実行する追加の参照があり、RAMへの追加の読み取りが必要になるため、常に遅くなります。オブジェクトをstructsにグループ化して、それらが一緒に使用されるようにして、これらのメモリ要求をより高速なRAM/オンボードキャッシュにキャッシュできるようにしてください。

構造体のメンバーに実際には制限はなく、関数がとるべきパラメーターの最大数を超えたときに役立つことがよくあります。私は(2002年に)魔法の数は7であると教えられました。

最終的に、メンバーをstructsにグループ化するとき、どの関数がそれらを使用するかを識別できるはずです。構造体を渡す代わりに、関数をメンバーにして、そのパラメーターのメンバーを取得するために構造体を逆参照する必要をなくすことができます。structこの時点で、おそらく同等のC++ラベルを与えることができると思いますclass

于 2012-02-04T22:56:18.327 に答える