Peut-être que c'est la grippe, ou je suis tout simplement stupide, mais je ne peux pas comprendre une partie de this code cadre Corbeau. Mon analyseur C++ interne échoue.Incapable de comprendre ce paramètre de modèle
template <typename MW>
struct check_before_handle_arity_3_const
{
template <typename T,
//this line
void (T::*)(int, typename MW::context&) const = &T::before_handle
>
struct get
{ };
};
Je sais que c'est un paramètre de modèle dans la déclaration de modèle. Cela ressemble peut-être à un paramètre de type lambda ou pointeur de fonction ... mais, je ne suis pas sûr. Quelqu'un peut-il expliquer cette ligne?
Mise à jour: Exploring profondeurs de nouvelles connaissances obtenues - après la réponse a été donnée - m'a conduit à cet extrait d'un grand book:
Un modèle peut accepter un pointeur vers une fonction en tant que non typiques modèle paramètre. (Le plus souvent dans ce livre, les paramètres de type non-type sont valeurs intégrales.) [...] Utiliser un pointeur sur une fonction comme argument de type non-type signifie que nous n'avons plus besoin de le stocker dans la carte. Cet aspect essentiel nécessite une compréhension approfondie. La raison pour laquelle nous n'avons pas besoin de stocker le pointeur sur une fonction est que le compilateur a des connaissances statiques à ce sujet. Ainsi, le compilateur peut coder en dur l'adresse de la fonction dans le code du trampoline.
Donc, maintenant je connais une des raisons d'utiliser cette technique.
C'est un pointeur de fonction membre de 'T'. Vous avez oublié de poser une question BTW. –
Mon analyseur de grammaire anglaise ne parvient pas à voir un point d'interrogation. Quelle est votre question? Que ce soit C++? Que ça te tue? –
cette mise à jour est-elle qualifiée de question? – strangeqargo