2017-01-18 2 views
0

В настоящее время я разрабатываю MPLAB X (IDE) на платформах PIC32 с использованием языка программирования C.Решение на основе текстового языка

У меня есть проект MAJOR, который включает отображение графики и текста на экране TFT. Мы разрабатываем наши системы для нескольких языков, включая языки, написанные «справа налево» & «Слева направо». Значит, некоторые символы также меняют свое положение, а тексты меняют их выравнивания на экране.

До сих пор Iv'e видел, что мой бывший разработчик реализует код таким образом, чтобы каждый экран отображался, или каждый объект, представленный на экране, тестировался на выбранный язык и затем предпринимал соответствующие действия.

например:

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

Как вы можете видеть, это кажется довольно накладные расходы, и код таким образом имеет много лишнего дублирования кода, особенно, когда эта структура повторяется внутри почти каждая функция/исходный файл ,

Я пытаюсь придумать подход для разработки более «полиморфной» структуры, которая не требовала бы стольких «если бы» заявлений.

Я попытался найти в Интернете некоторые примеры реализации решений на основе текста, но не смог найти то, что мне нужно, в основном из-за того, что мне сложно описать мой вопрос.

Надеюсь, что это не смутный вопрос, , но существует ли какой-либо структурный консенсус в отношении реализации подобных ситуаций?

Большое спасибо, Tsoof А.

+0

Текст принятие основного решения в сторону. Является ли человек ** бывшим разработчиком **, потому что они никогда не слышали о функциях? – StoryTeller

+0

Функции были в использовании, указатели функций не были ... –

+0

Когда я читал '** SAME ** действия с незначительными изменениями в зависимости от выбранного языка.' Я вижу 'Что-то, что можно было бы извлечь в другую функцию с помощью некоторых флаги управления. – 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

Спасибо, это похоже на хороший подход. Я попытаюсь выяснить, как реализовать его в моем проекте. –

Смежные вопросы