私はいくつかの一般的な構造を書き込もうとしています。基本的に、私の目的に必要なのはC ++テンプレートですが、Cで書いているので、テンプレートは考慮されていません。現在、私は自分が望むことを達成するための2つの方法を検討しています。
方法1:プリプロセッサを使用します。そのようです:
#define DEFINE_PAIR(T) typedef struct Pair_##T{ \
T x; \
T y; \
} Pair_##T
DEFINE_PAIR(int);
int main(){
Pair_int p;
return 0;
}
明らかな欠点は、型を使用する前にマクロを呼び出さなければならないことです。おそらくもっと不利な点がありますが、それを指摘していただきたいと思います。
方法2:次のようにvoidポインタを使用します。
typedef struct Pair{
void* x;
void* y;
} Pair;
明らかに、このアプローチは型安全ではありません(doubleのペアを期待する関数に文字列のペアを簡単に渡すことができます)。さらに、このアプローチでは、割り当て解除を行うコードが非常に面倒になります。
これについてのあなたの考えを聞きたいです。2つの方法のどちらが良い/悪いのか、そしてその理由は何ですか?Cで一般的な構造体を書くために使用できる他の方法はありますか?
ありがとう。