Maison  >  Questions et réponses  >  le corps du texte

c++ - Objet fonction générique.

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.

淡淡烟草味淡淡烟草味2685 Il y a quelques jours826

répondre à tous(3)je répondrai

  • 習慣沉默

    習慣沉默2017-05-16 13:24:50

    __copy_dispatch<InputIterator,OutputIterator>()

    C'est la classe d'appel

    __copy_dispatch<InputIterator,OutputIterator>
    Constructeur par défaut de

    , sa fonction est de générer un objet temporaire. Suivant

    (fist,last,result)
    La fonction de

    est d'appeler Operator() sur cet objet temporaire avec le premier, le dernier et le résultat comme paramètres réels.

    répondre
    0
  • 怪我咯

    怪我咯2017-05-16 13:24:50

    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

    .

    répondre
    0
  • 習慣沉默

    習慣沉默2017-05-16 13:24:50

    En fait, lambda a également créé une classe qui surcharge Operator() pour obtenir l'effet de foncteur.

    répondre
    0
  • Annulerrépondre