C نوع بيانات قالب البرمجة

لدي وظيفتان في C ونفعل الشيء نفسه تمامًا ، والفرق الوحيد هو أنواع البيانات التي تم تمريرها إلى كل دالة على سبيل المثال. واحد هو int char واحد *. هل هناك طريقة لدمج هذه الوظائف مع واحدة بحيث عندما أطلب هذه الوظيفة لا داعي للقلق بشأن نوع البيانات. يمكن القيام بذلك في C ++ باستخدام قالب ولكن أريد أن أفعل الشيء نفسه في C ولا أعرف كيف ، تشك.

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 kernel.

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
وأضاف