C ++ как использовать одну и ту же функцию дважды с разными именами и разными именами для переменных - PullRequest
0 голосов
/ 22 августа 2011

У меня есть функция, которая управляет устройством.Это устройство доступно дважды, поэтому мне нужны одинаковые функции для двух устройств.Из соображений обслуживания я не хочу кодировать функцию дважды (по одному для каждого устройства), потому что тогда мне всегда нужно применять изменения дважды.

Функции в принципе одинаковы, но должны работатьна разных переменных.Можно ли создать экземпляр этой функции с «переменным» именем, похожим на шаблон, но не с классами, а с именами?Я пытаюсь привести пример.Это должно выглядеть примерно так:

void function_x (int Var, double Vary, ...) {
int var3_x = getFunctionFromDatabase(var3_x);
double var2_x = getFunctionFromDatabase(var2_x);
// some operations
}

Функции применяются двумя экземплярами класса Device Handler.Переменные var1_x, var2_x и var3_x хранятся в пуле данных как var1_1, var1_2, var2_1, ... «та же» переменная, но одна для каждого устройства.Один контроллер управляет двумя устройствами через эти переменные и пул данных.

Возможно ли это как-то?

Я надеюсь, что проблема прояснилась;).Это мой первый вопрос здесь: P.Заранее спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Почему бы не использовать массив? Э.Г.

var1[0], var1[1], etc.

Используйте элемент массива для каждого устройства, которым вы управляете.

Вы могли бы сделать некоторые хитрости с макросами, но я думаю, что код будет более понятным, если вы используете массивы.

Даже если переменные находятся в библиотеке, которую вы не можете изменить, вы можете установить массивы указателей на исходные переменные в функции инициализации. E.g.:

var1[0] = &var1_0;
var1[1] = &var1_1;

Затем function_x становится функцией и принимает параметр для индекса устройства.

0 голосов
/ 22 августа 2011

Вы говорите, что они имеют разные переменные, в этом случае это был бы простой случай перегрузки функции. Ваш пример подразумевает, что вы хотите получить функцию из базы данных, и в этом случае вам нужно будет использовать указатели функций. Другой вариант заключается в том, что у вас есть 1 функция, и вы передаете ей дескриптор (или некоторые другие), а также ваши аргументы, чтобы определить, какое это устройство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...