C : Fonction retournant une autre fonction

Fermé
Sara426 Messages postés 671 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 16 mai 2012 à 14:37
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 mai 2012 à 16:36
Bonjour,

Je programme en C (pas C++ ni C#).

Je voudrais créer une fonction qui retourne une autre fonction mais je ne sais pas quoi écrire dans le return.

Par exemple :

int charCompare(Char c1, Char c2){
...
}

Comparator getComparator(Datatype type){
	if(type==CHAR){
		return int (*charCompare)(Char c1, Char c2);
	}
	...
}





Est-ce que c'est juste ou pas ?

Cordialement.
Sara.

2 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 16/05/2012 à 16:36
Salut.
Le plus simple est sans doute de passer par un typedef :
typedef type_retour (*fonction1) (types_parametre) ; 
fonction1 getComparator(datatype D) 
{ 
   ... 
   return charCompare; 
}

un bon court : http://www.newty.de/fpt/zip/f_fpt.pdf
Voir en particulier la section 2.7. bonne chance.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
1
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
16 mai 2012 à 15:37
Vu la signature de ta méthode getComparator, je dirais que tu dois retourner un Comparator ;)

Moi pour le qsort je fais comme ceci si ça peut t'aider :
typedef int (*cmpfct)(const void*, const void*);

int compare(Token *a, Token *b)
{
	if (a->num == b->num)
	{
		return 0;
	}
	return a->num - b->num;
}

int main(int argc, const char ** argv)
{
	Tokens t1[10];
	
	/* Remplissage du tableau */
	qsort(t1, 10, sizeof(Token), (cmpfct) compare);
}
0