Memutuskan antara kekosongan* dan Penunjuk ke Fungsi Ahli
Apabila bekerja dengan kebolehoperasian C/C, seseorang boleh menghadapi kesukaran apabila cuba menghantar antara penunjuk kosong dan penunjuk kepada fungsi ahli. Isu ini sering timbul apabila berurusan dengan penutupan dalam bahasa seperti Lua, di mana data pengguna disimpan sebagai penunjuk kosong.
Masalah:
Menghantar kekosongan* ke penuding ke fungsi ahli dalam C adalah tidak sah kerana perbezaan asas dalam perwakilan ingatan mereka. Penunjuk kepada ahli mengandungi maklumat tambahan yang tidak boleh diakses melalui penunjuk biasa.
Penyelesaian:
Untuk menyelesaikan masalah ini, pertimbangkan pilihan berikut:
1. Balut Fungsi Ahli dalam Fungsi Percuma:
Coretan Kod:
<code class="cpp">int call_int_function(lua_State *L) { void (*method)(T*, int, int) = reinterpret_cast<void (*)(T*, int, int)>(lua_touserdata(L, lua_upvalueindex(1))); T *obj = reinterpret_cast<T *>(lua_touserdata(L, 1)); method(obj, lua_tointeger(L, 2), lua_tointeger(L, 3)); return 0; }</code>
2. Gunakan Objek Fungsi:
Pertimbangan Lain:
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Antara Kekosongan* Penunjuk dan Penunjuk ke Fungsi Ahli dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!