C Тип данных шаблона программирования - PullRequest
2 голосов
/ 13 ноября 2011

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

Ответы [ 2 ]

1 голос
/ 13 ноября 2011

Я знаю два распространенных способа борьбы с такой ситуацией в C.1) Замените int и "char *" на "void * p" и "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:: список в ядре Linux.

0 голосов
/ 13 ноября 2011

Если они " делают одно и то же ", то, возможно, в одном из них вы конвертируете параметр в ДРУГОЙ тип (char* ==> int или int ==> char*). Если это так, вы можете выполнить только преобразование, а затем вызвать другую функцию. Таким образом, у вас будет только одна копия большинства из них.

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

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