我目前正在使用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。
答案 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;
}