Я пытаюсь написать некоторые общие структуры. По сути, для моих целей мне нужны шаблоны 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), плюс код, выполняющий освобождение, становится намного более запутанным при таком подходе.
Я хотел бы услышать ваши мысли по этому поводу. Какой из двух методов лучше / хуже и почему? Есть ли другой метод, который я мог бы использовать для написания общих структур в C?
Спасибо.