C编程模板数据类型

我在 C 中有两个函数做完全相同的事情,唯一的区别是传递给每个函数的数据类型,例如一个是另一个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]);

例如,请参阅stdlib的 qsort

2)使用预处理器,如

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

像这样的东西用来模拟linux内核中的std :: list。

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
额外