C Тип данных шаблона программирования

У меня есть две функции в C , выполняющие точно то же самое, единственное различие - это типы данных, передаваемые каждой функции, например. один - int другой char *. Есть ли способ объединить эти функции с одним, так что, когда я вызываю эту функцию, мне не нужно беспокоиться о типе данных. Это можно сделать в C ++ с использованием шаблона, но я хочу сделать то же самое в C и не знаю, как, thx.

2
Что вы делаете, это то же самое для строк и целых чисел?
добавлено автор Seth Carnegie, источник
Покажите нам код?
добавлено автор Bart, источник

2 ответы

I know two common ways to deal with such situtation in C.
1)Replace int and "char *", with "void *p" and "int size"

void f1(int i); void f2(char *str); -> void f(void *p, int s);
f(&i, sizeof(i)); f(str, strlen(str);//or may be f(str, sizeof(str[0]);

например, qsort из stdlib

2) Используйте препроцессор, например

#define f(arg) do { \
   //magic
} while (0)

такие вещи используются для эмуляции std :: list в ядре linux.

1
добавлено
Спасибо, что бы
добавлено автор Code Gre, источник

If they are "doing exactly the same thing", then perhaps in one of them you are converting the parameter into the OTHER type (char* ==> int or int ==> char*). If so, you could do just the conversion and then call the other function. That way you'd only have one copy of the majority of it.

Нет никакого способа элегантного «шаблонного» поведения. Попытка сделать это, сделает ваш код непонятным MESS.

0
добавлено