generic.h
template無しで型安全なコンテナを作るには、昔っからgeneric.hというものがあります。
詳細は「επιστημηのオブジェクト指向的日常」isbn:4881358022の付録CD-ROM収録のバックナンバー記事にありますが、ざっと抜き出すとこんな様子です。
#define name2(x, y) x##y #define declare(c, t) name2(c, declare)(t) #define implement(c, t) name2(c, implement)(t)
使い方はhttp://h30097.www3.hp.com/cplus/clu003.htm……ではなんですからサンプル挙げときます。
#include "generic.h" #define stack(T) name2(T, stack) #define stackdeclare(T) typedef struct { ... } stack(T); #define stackimplement(T) ... declare(stack, int) /* 普通は.hに置く */ implement(stack, int) /* どっかの.cに置く */ int main() { stack(int) s; ... return 0; }
マクロの##隠しただけじゃね!?という突っ込みはしないでおいてあげましょう……仮にも昔実際に使われていたヘッダーです。はあ。これだからC/C++は。