Какой способ лучше для создания шрифтов - агностические структуры в C?

Я пытаюсь написать несколько общих структур. По сути, для моей цели мне нужны шаблоны 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?

Спасибо.

7
задан 15 August 2011 в 18:59
поделиться