Mencipta std::function daripada Move-Capturing Lambda
Mencipta std::function daripada jenis bergerak sahaja, seperti sebagai lambda penangkap bergerak, boleh menyebabkan ralat disebabkan oleh sekatan pembangun bergerak. Sekatan ini berpunca daripada cara std::function ditakrifkan dan dibina.
Memahami std::function Constructor
std::function constructor boleh dipanggil masuk dua cara:
Dalam kedua-dua kes, lambda (F) mestilah CopyConstructible. Ini bermakna anda tidak boleh memindahkan lambda ke dalam std::fungsi secara langsung.
Selain itu, operator = ditakrifkan dari segi pembina dan swap, yang bermaksud sekatan yang sama dikenakan.
Akibat untuk Jenis Pergerakan Sahaja
Oleh itu, tidak mungkin untuk membina std::fungsi daripada lambda penangkap bergerak yang menangkap jenis bergerak sahaja. Percubaan untuk berbuat demikian akan mengakibatkan ralat masa penyusunan disebabkan oleh pembina salinan yang dipadamkan secara tersirat.
Penyelesaian Alternatif
Untuk menyelesaikan isu ini, anda boleh menggunakan shared_ptr untuk membungkus jenis bergerak sahaja dan kemudian menangkap shared_ptr dalam lambda anda. shared_ptr akan memastikan bahawa jenis boleh disalin, membolehkan anda mencipta fungsi std:: daripada lambda.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Mencipta `std::function` daripada Lambda Move-Capturing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!