基于文本语言的决策制定

时间:2017-01-18 07:47:27

标签: c text graphics polymorphism pic

我目前正在使用C编程语言在PIC32平台上使用MPLAB X(IDE)进行开发。

我有一个MAJOR项目,包括在TFT屏幕上显示图形和文字。 我们开发了多种语言的系统,包括“从右到左”和“从右到左”编写的语言。 “左到右”。 因此,一些符号也会改变它们的位置,文本会改变它们在屏幕上的对齐方式。

到目前为止,我看到我以前的开发人员以一种显示每个屏幕的方式实现代码,或者屏幕上显示的每个对象都针对所选语言进行测试,然后相应地采取措施。

e.g:

/**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。

1 个答案:

答案 0 :(得分: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;
  }