Шаблон функции не является функцией. Функция не может делать то, что делает шаблон функции. Набор функций может делать то же, что и шаблон функции (в некоторой степени; в коллекции функций отсутствует вывод аргументов шаблона, но это просто syntacti c sugar). Строгий способ реализации сопоставимого набора функций в C заключается в следующем:
void relu_float_1_1 (float arr[][1][1], float layermap[][1][1]);
void relu_float_1_2 (float arr[][1][2], float layermap[][1][2]);
// ... other sizes
void relu_double_1_1(double arr[][1][1], double layermap[][1][1]);
void relu_double_1_2(double arr[][1][2], double layermap[][1][2]);
// ... other sizes
// ... other types
Вам нужно написать только те, которые вы используете.
Тем не менее, вы обычно не пишите подобные функции в C. Прямая транслитерация редко дает хорошие результаты, если целью является перевод одного языка на другой.
Еще одна версия стиля C заключается в передаче измерений во время выполнения:
void relu_float (int width, int depth, float arr[][width][depth],
float layermap[][width][depth]);
void relu_double(int width, int depth, double arr[][width][depth],
double layermap[][width][depth]);
// ... other types