реклама на сайте
подробности

 
 
> Функция, выполняющая действия с аргументами разных типов, Как сделать перегрузку функции
alux
сообщение Jun 14 2007, 20:18
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Т.е. чтобы в функцию передавался аргумент, который может быть как unsigned char , так и signed char.
Сейчас у меня работает так::
//Глобальные переменные
unsigned char* ptr;
unsigned char val;
signed char offset;
void valcodr(void);

//Определение
void valcoder(void)
{
выполняет действия с ptr;
}

//Вызов функции, которая изменяет переменную val
ptr=&val;
valcoder();

Вопрос. Как теперь заставить функцию работать с знаковой переменной offset? Возможна ли такая перегрузка функции?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alux
сообщение Jun 15 2007, 09:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Номер с template не прошел. Проще действительно создать раздельные функции для для разных типов переменных.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 15 2007, 20:13
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alux @ Jun 15 2007, 12:45) *
Номер с template не прошел. Проще действительно создать раздельные функции для для разных типов переменных.
Я конечно не знаю, какие магические действия делает ваша функция с глобальной переменной с помощью глобального указателя. То, что эти глобальные переменные никоим образом не являются аргументами функции вам уже объяснили. Но может вам подойдет такой вариант:
Код
signed char Valcoder()   // не более +-127 пупок за раз
{


}
signed char Offset;
unsigned char Val1;
unsigned int Val2;
signed long Val3;

void Test()
{
   Offset += Valcoder(); if(Offset > 100) Offset = 100; else if(Offset < -100) Offset = -100;
   Val1 += Valcoder(); if(Val1 > 200) Val = 0;
   Val2 += Valcoder();
   Val3 += Valcoder();
}
или такой вариант, используя действительно параметры функции:
Код
signed int Valcoder(signed int init, signed int min, signed int max)
{
   signed int Value = init;
...........
   if(Value < min) Value = min;
   if(Value > max) Value = max;
..........
  return Value;

}
signed char Offset;
unsigned char Val1;
unsigned int Val2;

void Test()
{
   Offset = Valcoder(Offset, -100, 100);
   Val1 = Valcoder(Val1, 0, 200);
   Val2 = Valcoder(Val2, 0, 65535);
}
Цитата(alux @ Jun 15 2007, 12:45) *
Номер с template не прошел.
Если вы пытались использовать их в С, то вас предупреждали - С не знает о template, только С++. Если у вас "номер не прошел" в С++, значит вы просто не смогли правильно объяснить компилятору, чего вы от него хотите.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016