Существует два основных подхода к решению этой проблемы в C
:
(1) Используйте union
и каждый тип pointer to user-class
[вы можете попробовать разные символы для каждого union member
сообщить функции, какой вызов вы сделали];
(2) Используйте void *
в качестве pointer to user-class
[в этом случае вам необходимо использовать char *
или строковый тип для указания имени типа].
Теперь, например, (1) будет закодировано как:
union _dynarrtr_ {
struct dynarray *a;
struct tree *t;
};
typedef union _dynarrtr_ UDynArrTree;
/*UATChar is either 'a' or 't' (or whichever other union members there are)*/
int get_element(char UATChar, UDynArrTree *UATPtr, int index);
И, (2) будет закодировано следующим образом:
/*Here, you can test 'typeStr' against the name of each type*/
int get_element(const char *typeStr, void *objPtr, int index);