В C нет стандартных перегрузок функций (и нет шаблонов), но вы могли бы, вероятно, изучить функции «printf-like» (или variadic functions), и, возможно, они могут делать то, что вам нужно. В любом случае они допускают список гибких параметров.
Существует такая here такая функция, которая принимает целочисленный массив с переменным размером.
Возможно, вы могли бы иметь сигнатуру, такую как void iterate(const char* format, ...);
использовать в следующих случаях:
iterate("char", some_char_array); // for char arrays/strings
Или
iterate("int", some_int_array); // for integer arrays
Aniket делает хорошую точку, хотя, как вы считаете элементы в целочисленном массиве? Если вы передадите массив int в качестве аргумента, вам нужно будет также передать размер, который побеждает цель подсчета элементов в массиве (как вы уже знаете, то есть размер).
Я предполагаю, что вы не знаете размер, но у вас есть значение терминатора в массиве (например, -1).
Я взломал что-то быстрое, что любопытное делает то, что вам нужно, с учетом вышеупомянутого предположения.
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
int iterate(const char* format, ...)
{
va_list ap;
va_start(ap, format);
if (strcmp(format, "char") == 0)
{
char* array = va_arg(ap, char*);
return strlen(array);
}
else if (strcmp(format, "int") == 0)
{
int j = -1;
int* int_array = va_arg(ap, int*);
while (int_array[++j] != -1)
;
return j;
}
return 0;
}
int main()
{
printf("%d\n", iterate("char", "abcdef"));
int arr[] = {5, 4, 3, 2, 1, 0, -1};
printf("%d\n", iterate("int", arr));
return 0;
}
Печатается:
$ ./a.out
6
6
Что такое 'int size'? –
Размер массива? Я проясню это, поскольку кажется, что это не ясно. – Nobilis
Хорошо, если он знает размер массива перед рукой, почему он будет использовать суперфункцию, подобную этой, чтобы автоматически вывести тип и вызвать соответствующую функцию для вычисления длины массива? :-) –