2017-01-18 10 views
0

私は現在、Cプログラミング言語を使用しているPIC32プラットフォーム上でMPLAB X(IDE)を開発中です。テキストベースの意思決定

私は、TFTスクリーン上にグラフィックスとテキストを表示することを含む主要なプロジェクトを立ち上げました。 "右から左へ" & "左から右"と書かれた言語を含む、複数の言語のシステムを開発しています。 したがって、シンボルによっては位置が変わり、テキストの並びが画面上で変化します。

これまでの私の以前の開発者は、すべての画面が表示されるか、画面上に表示されるすべてのオブジェクトが選択された言語についてテストされ、それに応じてアクションを実行する方法でコードを実装していました。

例:

/**Some actions shared by all the languages**/ 
. 
. 
/* language specific actions: */ 
if(language == lang1){ 
    . 
    . 
    /* Performs some actions */ 
    /* e.g: */ 
    displayText(txt, LEFT_ALIGNED); 
    . 
    . 
} else if(language == lang2){ 
    . 
    . 
    /**SAME** actions with only minor changes depending on the language selected. */ 
    /* e.g: */ 
    displayText(txt, RIGHT_ALIGNED); 
    . 
    . 
} else if.... (and so on) 

あなたが見ることができるように、それはかなりのオーバーヘッドをようで、コードこの方法は、余分なコードの重複をたくさん持っている、特にこの構造は内部に繰り返されているほぼすべての機能/ソースファイル。

私は非常に多くの「if else」ステートメントを必要としない、より多面的な構造を開発するアプローチを考えようとしています。

テキストベースの意思決定を実装するいくつかの例をインターネットで検索しようとしましたが、私の質問を記述するのが難しいという事実のために、私が必要とするものを見つけることができませんでした。

これはやや曖昧な質問ではありませんが、 ですが、このような状況を実装するための構造的コンセンサスはありますか?

多くのおかげで、 TsoofのA.

+0

テキストを基本的な意思決定はさておきその人は機能のことを聞いたことがないので** **以前の開発者ですか? – StoryTeller

+0

関数が使用されていましたが、関数ポインタが... –

+0

選択された言語に応じて、わずかな変更だけで** **同じ**のアクションを読むと、 ''いくつかの関数で別の関数に抽出された可能性があります制御フラグ」と呼ばれる。 – StoryTeller

答えて

0

私は言語/アクション構造体の配列のために行くだろうし、問題の言語の配列を検索し、関連するアクションを実行します。

typedef struct { 
    char *lang; 
    void (*action)(); 
} action_t; 

action_t actions[] = {{"en", func1}, {"de", func2}, ...}; 
... 
for(int i = 0; i < sizeof(actions)/sizeof(actions[0]); i++) 
    if(!strcmp(actions[i].lang, language)) { 
    actions[i].action(); 
    break; 
    } 
+0

ありがとう、それは良いアプローチのようです。 私はプロジェクトでそれを実装する方法を理解しようとします。 –

関連する問題