c++ - Objet fonction générique.
淡淡烟草味
淡淡烟草味 2017-05-16 13:22:50
0
3
832

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.

淡淡烟草味
淡淡烟草味

répondre à tous(3)
習慣沉默
__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.

刘奇

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!