Rumah > Soal Jawab > teks badan
Saya baru sahaja melihat sekeping kod ini apabila saya melihat fungsi salinan analisis kod sumber 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));
}
};
__copy_dispatch ini ialah struct dengan operator yang terlebih muatan () Apabila dipanggil dalam salinan, ia terus
__copy_dispatch<InputIterator,OutputIterator>()(fist,last,result);
Secara langsunggunakan struct ini untuk memanggil operator (), tetapi tidak menggunakan objek stuct.
Adakah ini okay? Saya dengan cepat melihat melalui c++ primer dan tidak dapat mencari jawapannya.
Tolong bantu saya menjawab soalan ini. terima kasih, terima kasih.
習慣沉默2017-05-16 13:24:50
__copy_dispatch<InputIterator,OutputIterator>()
Ini ialah kelas panggilan
__copy_dispatch<InputIterator,OutputIterator>
Pembina lalai , fungsinya adalah untuk menjana objek sementara. Seterusnya
(fist,last,result)
Fungsi adalah untuk memanggil operator() pada objek sementara ini dengan pertama, terakhir dan hasil sebagai parameter sebenar.
怪我咯2017-05-16 13:24:50
Menggunakan struct ini, operator () dipanggil Ini adalah maksud functor. Fungsinya di sini adalah untuk mencipta objek tanpa nama
習慣沉默2017-05-16 13:24:50
Sebenarnya, lambda
juga mencipta kelas yang membebankan operator() untuk mencapai kesan functor.