4 votes

Utilisation de typedef sur une fonction

Dans ce qui suit, comment puis-je définir ma fonction avec la syntaxe typedef ?

typedef void F();

//declare my function
F f;

//error
F f { }

6voto

Nawaz Points 148870

La définition de la fonction suit la syntaxe habituelle :

//declare my function
F f; //it is exactly equivalent to : void f();

//definition
void f() { cout << "hello world"; }

Pour vérifier que la définition est bien la définition de la fonction qui est précédemment déclarée appeler la fonction f() juste après déclaration et avant (lire les commentaires dans main() ):

//declaration
F f;  

int main() 
{
    f(); //at compile-time, it compiles because of *declaration*
} 

//definition
void f() { std::cout << "hello world" << std::endl; }

Démonstration : http://ideone.com/B4d95


Pour ce qui est de la raison pour laquelle F f{} ne fonctionne pas, car elle est spécifiquement interdite par la spécification du langage. Le §8.3.5 (C++03) dit

Un typedef de type fonction peut être utilisé pour déclarer une fonction mais ne doit pas être utilisé pour définir une fonction (8.4) .

[Example:
   typedef void F();
   F fv; // OK: equivalent to void fv();
   F fv { } // ill-formed
   void fv() { } // OK: definition of fv

—end example]

Points importants :

  • Un typedef de functon peut être utilisé pour déclarer une fonction
  • Un typedef de functon ne peut pas être utilisé pour définir une fonction

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X