Нужно реализовать на
Си шаблоны.
Хотел получить удобное решение вида:#include <stdio.h>
#define GLIU_LOCAL_TYPE double
#include "sandbox\gliuSumm.h"
int main(){
printf("%g", Summ_double(1, 0.5));
return 0;
}
Написал реализацию:
gliuSumm.h#define GLIU_LOCAL_DEFAULT_TYPE int
#include "gliuPreDef.h"
GLIU_LOCAL_TYPE GEN_FUNC_NAME(Summ)(GLIU_LOCAL_TYPE a, GLIU_LOCAL_TYPE b)
{
//puts(__FUNCSIG__);//MSVS
return a + b;
}
gliuPreDef.h#ifndef GLIU_LOCAL_TYPE
#ifdef GLIU_LOCAL_DEFAULT_TYPE
#define GLIU_LOCAL_TYPE GLIU_LOCAL_DEFAULT_TYPE
#else
#define GLIU_LOCAL_TYPE int
#endif
#endif
#define GEN_FUNC_TYPE_NAME(a,b) a ## _ ## b
#define GEN_FUNC_NAME(a) GEN_FUNC_TYPE_NAME(a,GLIU_LOCAL_TYPE)
Получаю:
error C3861: Summ_double: идентификатор не найден
Оказалось, что
#define GEN_FUNC_TYPE_NAME(a,b) a ## _ ## b
не выполнил макроподстановку
#define GLIU_LOCAL_TYPE double
и я получил функцию вида:
Можно ли как-то выполнить нужную мне подстановку?
Если нет, то как ещё можно в
Си реализовать шаблонные функции?