Я пытаюсь написать несколько общих структур. По сути, для моей цели мне нужны шаблоны 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: просто используйте пустые указатели, например так:
typedef struct Pair{
void* x;
void* y;
} Pair;
Очевидно, что этот подход небезопасен по типу (я мог бы легко передать пару строк в функция, ожидающая пары двойников), плюс код, выполняющий освобождение, становится намного сложнее с этим подходом.
Я хотел бы услышать ваши мысли по этому поводу. Какой из двух методов лучше / хуже и почему? Есть ли другой метод, который я мог бы использовать для написания общих структур на C?
Спасибо.