Типовое программирование с макросами: уловки для определения типа?

Можно делать определенные типы универсальных типов -функции как макросы в C , например, такие как:

#define SQRT(x) (sizeof(x) == sizeof(float) ? sqrtf((x)) : \
                 sizeof(x) == sizeof(double) ? sqrt((x)) : \
                 sqrtl((x)) )

Это работает (в основном), как и ожидалось, пока x является типом с плавающей запятой.

Но что, если Мне нужен макрос общего типа, который может принимать либо целочисленный тип, либо тип указателя, который может иметь одинаковый размер. Есть ли умный способ проверить, является ли аргумент макроса целым числом или указателем? А как насчет целого числа по сравнению с типом с плавающей запятой?

8
задан Brian Tompsett - 汤莱恩 2 March 2016 в 19:45
поделиться