#define DEF_SP_HOGE(type) void hoge<type>() { ・・・}

DEF_SP_HOGE(int)
DEF_SP_HOGE(char)
DEF_SP_HOGE(short)
DEF_SP_HOGE(long)
・・・

#undef DEF_SP_HOGE

みたいな感じで局所的に使うマクロを重複させないテクニックみたいなのってありますか?
DEF_SP_HOGEが定義されてればDEF_SP_HOGE_で同じことをやって
それも定義されてたらDEF_SP_HOGE__・・・みたいな感じで