Olá pessoal, estou desenvolvendo em C um código que cria novos tipos de dados, mais avançados, por exemplo, algo semelhante à ArrayList do C# e List do Java, etc. Inicialmente, criei um tipo chamado IntList, que é uma lista de inteiros. Criei, então, funções para tratar este tipo de dado, sendo alguma delas:
IntList *prepare(IntList *list);
IntList *add(IntList *list, int value);
A primeira função recebe o ponteiro que representa a lista, prepara-o para uso e devolve-o pronto. Assim, se eu criasse uma lista no meu código principal, poderia declará-la assim:
IntList *lista = prepare(lista);
E para adicionar um valor, poderia usar:
lista = add(lista, 150);
Até aí tudo funcionou perfeitamente. O problema está quando eu passo a querer criar outros tipos de listas, por exemplo, uma FloatList. Neste caso, se eu criar uma nova função "add", o C retornará um erro, já que nele a função é definida apenas pelo nome, impedindo uma sobrecarga, como em C++. A solução lógica inicial - e que eu implementei - foi criar uma função para cada tipo de lista, assim, para listas de inteiros eu criei a função "prepareIL" e para listas de floats, a função "prepareFL". Só que eu pretendo criar vários tipos diferentes de listas e isso tornaria os nomes das funções muito complicados.
A minha pergunta é se existe alguma forma de eu criar uma única função, por exemplo, a função "prepare" que receba uma lista e verifique qual tipo de lista é, seja IntList, FloatList, etc. Uma coisa eu percebi por acidente: se na função IntList *prepareIL(IntList *list) eu passar uma FloatList ele vai até receber o parâmetro sem erro de tipo, mas vai tratá-la como IntList, o que não é o que desejo.
Alguém pode me ajudar?
p.s.: O código da struct IntList e FloatList segue abaixo:
typedef struct {
char *ready;
int *values;
int size;
int lenght;
int maxInd;
int capacity;
} IntList;
typedef struct {
char *ready;
float *values;
int size;
int lenght;
int maxInd;
int capacity;
} FloatList;