@makaleks

Шаблоны в Си. Как выполнить макроподстановку при конкатенации?

Нужно реализовать на Си шаблоны.
Хотел получить удобное решение вида:
#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 и я получил функцию вида:4eb2999283d44cdba697b129c6d78d55.PNG

Можно ли как-то выполнить нужную мне подстановку?
Если нет, то как ещё можно в Си реализовать шаблонные функции?
  • Вопрос задан
  • 547 просмотров
Решения вопроса 1
@makaleks Автор вопроса
Можно ли как-то выполнить нужную мне подстановку?


Нужно было добавить второй уровень подстановки, чтобы конкатенация происходила с макросом, а не аргументом
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы