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.
Ini ialah kelas panggilan
Pembina lalai, fungsinya adalah untuk menjana objek sementara. Seterusnya
Fungsiadalah untuk memanggil operator() pada objek sementara ini dengan pertama, terakhir dan hasil sebagai parameter sebenar.
Menggunakan struct ini, operator () dipanggil Ini adalah maksud functor. Fungsinya di sini adalah untuk mencipta objek tanpa nama
Sebenarnya,
lambda
juga mencipta kelas yang membebankan operator() untuk mencapai kesan functor.