Je viens de voir ce morceau de code alors que je regardais la fonction de copie d'analyse du code source stl
template<class InputIterator,class OutputIterator>
inline OutputIterator copy(InputIterator first,InputIterator last,OutputIterator result)
{
return __copy_dispatch<InputIterator,OutputIterator>()(fist,last,result);//这是个函数
}
//这是完全泛化的的版本。
template <class InputIterator,class OutputIterator>
struct __copy_dispatch
{
OutputIterator operator()(InputIterator first,InputIterator last,OutputIterator result)
{
return __copy(first,last,result,iterator_category(first));
}
};
Ce __copy_dispatch est une structure avec un opérateur surchargé () Lorsqu'il est appelé en copie, il est directement
.__copy_dispatch<InputIterator,OutputIterator>()(fist,last,result);
Directementutilisez cette structure pour appeler l'opérateur (), mais sans utiliser d'objet stuct.
Est-ce que ça va ? J'ai rapidement parcouru C++primer et je n'ai pas trouvé la réponse.
S'il vous plaît, aidez-moi à répondre à cette question. Merci merci.
C'est la classe d'appel
Constructeur par défaut de, sa fonction est de générer un objet temporaire. Suivant
La fonction deest d'appeler Operator() sur cet objet temporaire avec le premier, le dernier et le résultat comme paramètres réels.
En utilisant cette structure, l'opérateur () est appelé. C'est la signification du foncteur. Sa fonction ici est de créer un objet sans nom
.En fait,
lambda
a également créé une classe qui surcharge Operator() pour obtenir l'effet de foncteur.