Saya sedang mencari sumber yang bagus untuk belajar tentang desain API yang baik untuk pustaka C ++, melihat objek bersama / dll. Ada banyak sumber daya untuk menulis API yang bagus, kelas yang bagus, templat dan sebagainya di tingkat sumber, tetapi hampir tidak ada apa-apa tentang menempatkan hal-hal bersama dalam lib dan shared executables. Buku-buku seperti Desain Perangkat Lunak C ++ Skala Besar oleh John Lakos menarik tetapi sudah ketinggalan zaman.
Apa yang saya cari adalah saran yaitu tentang penanganan template. Dengan templat di API saya, saya sering berakhir dengan kode pustaka di executable saya (atau pustaka lainnya) jadi jika saya memperbaiki bug di sana, saya tidak bisa begitu saja meluncurkan pustaka baru tetapi harus mengkompilasi ulang dan mendistribusikan kembali semua klien dari kode itu. (dan ya, saya tahu beberapa solusi seperti mencoba instantiate setidaknya versi paling umum di dalam perpustakaan dll.)
Saya juga mencari peringatan dan hal lain yang perlu diingat untuk menjaga kompatibilitas biner saat bekerja di perpustakaan C ++.
Apakah ada situs web atau buku yang bagus tentang hal-hal seperti itu?
sumber
std::unique_ptr
adalah hal yang cukup baru. Apa sebenarnya yang menurut Anda lebih cocok tentang API yang Anda usulkan? Misalnya, Anda harus mengelola semua sumber daya secara manual, misalnya menjamin kebocoran dan penghapusan ganda, misalnya? Atau cara di mana banyak dari tipe Anda memiliki satu atau dua nama huruf, membuat meramalkan tujuannya tidak mungkin?unique_ptr
, tidak mungkin menulis kode seperti itu.Jawaban:
Sebenarnya ada sebuah buku yang persis apa yang Anda cari. Itu panggilan, cukup tepat, Desain API untuk C ++. Situs web buku memiliki kode sumber dari buku dan Errata juga.
sumber
Ini sangat tidak mungkin. Fakta sederhananya adalah bahwa kadang-kadang, Anda memerlukan kompiler untuk melakukan pekerjaan, dan Anda tidak bisa begitu saja merapikan kebutuhan itu. Tidak ada fungsi yang bisa membuat
std::vector
perpustakaan bukan hanya header. Kompiler dapat membuat banyak sihir bekerja, tetapi Anda tidak dapat memilikinya tanpa memohonnya, dan itu adalah fakta kehidupan.Inilah yang dapat Anda lakukan: jangan gunakan template di mana Anda tidak membutuhkannya. Inilah yang tidak bisa Anda lakukan: apa pun.
Fakta sederhananya adalah bahwa kompilasi ulang dengan versi baru sebenarnya tidak terlalu berat dibandingkan dengan keuntungan kinerja, keamanan, dan fungsionalitas yang bisa Anda dapatkan dengan perpustakaan yang diketik secara statis.
sumber