Berbagai header C/C++ lintas platform file tunggal yang mengimplementasikan pustaka mandiri.
perpustakaan | keterangan | versi terbaru | bahasa |
---|---|---|---|
lucu_c2 | Rutinitas deteksi tabrakan 2D pada primitif, hasil boolean dan/atau pembuatan manifold, pengujian bentuk/sapu, siaran sinar | 1.10 | C/C++ |
lucu_net | Pustaka jaringan untuk game yang memerlukan lapisan keandalan opsional melalui UDP dengan skema keamanan bawaan | 1.03 | C/C++ |
lucu_tiled | Pemuat yang sangat efisien untuk peta ubin yang diekspor ke format JSON | 1.07 | C/C++ |
lucu_aseprite | Parsing file .ase/.aseprite menjadi koleksi struct yang ringkas dan nyaman | 1.04 | C/C++ |
suara_lucu | Muat/putar/loop (dengan plugin)/pan WAV + OGG (stb_vorbis wrapper untuk OGG) dalam mono/stereo, mixer khusus performa tinggi, dukungan musik + crossfade | 2.08 | C/C++ |
lucu_matematika | Matematika vektor 3D tingkat profesional melalui intrinsik SSE | 1.02 | C++ |
lucu_png | memuat/menyimpan PNG, kompiler atlas tekstur, dekompresor yang sesuai dengan DEFLATE | 1.05 | C/C++ |
lucu_spritebatch | Pengumpul sprite 2d waktu proses. Membuat atlas dengan cepat di dalam memori. Berguna untuk mengimplementasikan sprite batcher untuk tujuan apa pun (seperti game 2D) untuk rendering performa tinggi, tanpa perlu melakukan prakompilasi atlas tekstur pada disk. | 1.06 | C/C++ |
lucu_sinkronisasi | Kumpulan primitif sinkronisasi praktis, termasuk kunci baca/tulis dan sistem threadpool/tugas | 1.01 | C/C++ |
lucu_tls | Buat koneksi TLS ke situs web melalui TCP, berguna untuk permintaan HTTPS. | 1.01 | C/C++/Obj-C |
Umumnya header ini tidak memiliki ketergantungan dan dimaksudkan untuk disertakan langsung ke sumber Anda (periksa setiap header untuk dokumentasi spesifik di bagian atas file). Setiap header memiliki simbol LIBNAME_IMPLEMENTATION; tambahkan ini ke satu unit terjemahan dalam kode Anda dan sertakan header tepat setelahnya untuk menentukan simbol perpustakaan. Cukup sertakan header seperti biasa.
Beberapa header juga memiliki kode contoh atau demo. Di repo ini, cari saja folder contoh atau tes yang sesuai. Folder contoh sangat berguna untuk mengetahui cara menggunakan header tertentu.
Berikut tautan ke obrolan perselisihan untuk cute_headers. Jangan ragu untuk mampir dan mengajukan pertanyaan, memberikan saran, atau berdiskusi. Jika ada yang pernah menggunakan cute_headers, senang sekali mendengar pengalaman Anda! https://discord.gg/2DFHRmX
Cara mudah lainnya untuk menghubungi saya adalah di twitter @randypgaul.
- Apa gunanya membuat satu file? Mengapa ada implementasi dan fungsi statis di header?
Menyertakan header ini seperti menyertakan header biasa. Namun, untuk mendefinisikan implementasinya, setiap header terlihat seperti ini:
// Do this ONCE in a .c/.cpp file
#define LIBNAME_IMPLEMENTATION
#include "libname.h"
// Everywhere else, just include like a typical header
#include "libname.h"
Ini akan mengubah file menjadi kombo file header + c, satu kali. Intinya adalah: A) menangani header atau mengirimkannya ke orang-orang itu mudah, tidak ada file zip atau apa pun, cukup salin dan tempel satu file; B) skrip build sangat merepotkan, dan lib file tunggal ini dapat diintegrasikan ke dalam proyek apa pun tanpa memodifikasi satu skrip build.
- Bukankah menulis semua kode di header merusak waktu kompilasi?
Stigma bahwa implementasi header memperlambat waktu kompilasi berasal dari kode inline dan spam template. Dalam kedua kasus tersebut, setiap unit terjemahan harus menelusuri header dan menempatkan versi fungsi sebaris, atau agar templat menghasilkan berbagai fungsi dengan tipe spesifik. Hal ini menjadi lebih buruk setelah linker aktif dan perlu menyatukan unit terjemahan, menghapus simbol duplikat. Seringkali linker merupakan tugas single-thread dan benar-benar dapat menghambat waktu pembuatan.
Header file tunggal yang dibuat dengan baik tidak akan menggunakan templat apa pun dan menggunakan inline dengan hemat. Selain itu, header file tunggal yang dibangun dengan baik menggunakan #define untuk menempatkan implementasi (definisi fungsi dan simbol) ke dalam satu unit terjemahan. Dengan cara ini, header file tunggal yang dibuat dengan baik adalah hal terbaik yang dapat ditemukan oleh kompiler C, sejauh waktu pembuatannya. Terutama ketika header secara opsional dapat #mendefinisikan fitur-fitur yang tidak diperlukan.
- Bukankah perpustakaan hanya header ini hanyalah sebuah tren baru?
Saya pribadi tidak begitu tahu apakah ini iseng-iseng atau tidak, tetapi file-file ini sebenarnya bukan sekadar header. Itu adalah header dengan bagian file .C (implementasi) terlampir di bagian akhir. Ini adalah dua file berbeda yang disatukan dengan praprosesor C, tetapi bagian implementasi tidak pernah muncul kecuali pengguna melakukan #define LIB_IMPLEMENTATION. Langkah penentuan ini adalah satu-satunya langkah integrasi yang diperlukan untuk menggunakan header ini.
Sayangnya menulis pustaka header yang bagus cukup sulit, jadi lib header acak apa pun yang ada di alam liar mungkin bukan yang bagus. STB dan RJM adalah lib header yang cukup bagus, dan merupakan referensi yang bagus untuk mendapatkan gambaran seperti apa lib header yang bagus. Mattias Gustavsson memiliki koleksi header favorit saya.
- Apa lisensinya?
Setiap lib berisi info lisensi di akhir file. Ada pilihan antara domain publik, dan zlib.
- Saya mencari header yang pernah saya lihat sebelumnya, tetapi tidak ada. Kemana perginya?
Beberapa header yang tidak populer atau tidak begitu berguna sudah tidak digunakan lagi, dan masih ada di sini sekarang.
- *Apakah Anda memiliki perpustakaan tingkat yang lebih tinggi? Ini sepertinya levelnya terlalu rendah.
Header lucunya memang berlevel rendah. Mereka memecahkan masalah-masalah tertentu. Jika Anda mencari kerangka pembuatan game tingkat tinggi, saya sarankan untuk mencoba Cute Framework, kerangka pembuatan game 2D yang sebagian besar dibangun di atas berbagai header lucu tingkat rendah yang terlihat di sini.