Цитата(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, только С++. Если у вас "номер не прошел" в С++, значит вы просто не смогли правильно объяснить компилятору, чего вы от него хотите.