Fonction s'appliquant à tous les types en C.
Yakurena
-
Jolkdarr -
Jolkdarr -
Bonsoir,
je dois faire une fonction ayant le type (void*) en paramètre afin qu'elle puisse s'appliquer sur n'importe quel type. J'aimerais savoir quelle est la syntaxe d'une telle fonction.(en particulier comment on compare des variables dont on ne connait pas le type).
Merci d'avance
je dois faire une fonction ayant le type (void*) en paramètre afin qu'elle puisse s'appliquer sur n'importe quel type. J'aimerais savoir quelle est la syntaxe d'une telle fonction.(en particulier comment on compare des variables dont on ne connait pas le type).
Merci d'avance
A voir également:
- Fonction s'appliquant à tous les types en C.
- Fonction si et - Guide
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
- Les types de ram - Guide
- Types de souris informatique - Guide
- Fonction miroir - Guide
4 réponses
Hello !
Comme dirait Shakespeare :
"To need to know the type or not, that is the question."
Dans le premier cas, tu manipule en permanence des "void*" comme dans l'exemple ci-dessous :
Dans le cas où le type doit être connu, il te faut un moyen de le définir comme dans l'exemple suivant :
Take care !
Comme dirait Shakespeare :
"To need to know the type or not, that is the question."
Dans le premier cas, tu manipule en permanence des "void*" comme dans l'exemple ci-dessous :
void* min(void* p1, void* p2)
{
return p1 <= p2 ? p1 : p2;
}
Dans le cas où le type doit être connu, il te faut un moyen de le définir comme dans l'exemple suivant :
int data(void* where, int how)
{
switch (how)
{
case 0: return *(char*) where;
case 1: return *(short*) where;
case 2: return *(long*) where;
default: return *(int*) where;
}
}
Take care !
Mais dans ce cas,il faut saisir une variable entière ("how" dans ton exemple) qui va déterminer le type pointé. Le problème est que je dois simuler la classe "Vector" du C++ qui contient des fonctions appliquables sur un pointeur de n'importe quel type. Il faudrait donc pouvoir définir le type pointé de façon plus automatique.
La classe Vector est une classe générique. C'est-à-dire un modèle pour définir des classes utilisables pour tout type de données.
Pour ce type de problème en C, tu as deux possibilités :
1. utiliser un paramètre systématique qui donne la taille d'un élément de ton tableau.
2. simuler en C la généricité du C++ grâce à des macros (#define).
Pour ce type de problème en C, tu as deux possibilités :
1. utiliser un paramètre systématique qui donne la taille d'un élément de ton tableau.
2. simuler en C la généricité du C++ grâce à des macros (#define).
Pour être plus concret sur le point 2, voici un exemple :
Soit la fonction générique C++ suivante à simuler en C :
Avec une macro C, on pourrait écrire :
Pour l'utiliser, il faut instancier (une fois) au préalable :
Cette technique n'est pas beaucoup utilisée par les programmeurs C. Ils préfèrent coder en C++ et ils ont bien raison ;)
À noter, la généricité est intégrée à Ada depuis 1983 et sera rajoutée à Java dans les prochains compilateurs (2005 sans doute).
Soit la fonction générique C++ suivante à simuler en C :
template<typename T>
T data(const T* where)
{
return *where;
}
Avec une macro C, on pourrait écrire :
#define data2(T) T data_##T(T* where) \
{ \
return *where; \
}
Pour l'utiliser, il faut instancier (une fois) au préalable :
/* exemple d'instanciation : */ data2(int) /* exemple d'utilisation : */ int X = 12; data_int(&X);
Cette technique n'est pas beaucoup utilisée par les programmeurs C. Ils préfèrent coder en C++ et ils ont bien raison ;)
À noter, la généricité est intégrée à Ada depuis 1983 et sera rajoutée à Java dans les prochains compilateurs (2005 sans doute).