Вот реализация, которая смоделирована на шаблонах c ++
#define DEFINE_TEMPLATE(type) \
type * val_to_ptr_##type(type val){\
type * ptr = NULL;\
ptr = nm_malloc(sizeof(*ptr));\
*ptr = val;\
return ptr;\
}
#define USE_TEMPLATE(type,val)\
val_to_ptr_##type(val)
DEFINE_TEMPLATE(int);
int main(){
printf("%d",*USE_TEMPLATE(int,5));
return 0;
}
Вы должны были бы явно определить, для каких типов вы его используете, и должны были бы ввести такие вещи, как unsigned int
или double complex
, иначе вставка токена не будет работать.
Альтернативно используйте
USE_TEMPLATE(type) val_to_ptr_##type
и звоните
USE_TEMPLATE(int)(5);
Не нужно беспокоиться об оценке аргумента