A voir également:
- Fonction s'appliquant à tous les types en C.
- Fonction si et - Guide
- Un agent immobilier a préparé un diaporama pour présenter une maison à vendre. appliquez la mise en forme de la première diapositive à toutes les autres. quel est le code du portail ? ✓ - Forum Powerpoint
- Aucune application permettant d'ouvrir ce lien n'a été trouvée ✓ - Forum Wiko
- Fonction write c ✓ - Forum C
- Fonction si avec date ✓ - Forum Excel
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).