Kerangka kerja plugin C ++ lainnya

Entri


Siapa yang tidak mengunjungi, menggunakan perpustakaan open-source, berpikir: "Terima kasih kepada orang-orang ini untuk lib keren ini! Suatu hari nanti saya akan menulis sesuatu yang bermanfaat dan menaruhnya di tempat umum agar orang lain dapat menggunakannya! "


Ya semuanya! Atau tidak?


Dengan munculnya standar C ++ 17, kami diselesaikan lebih cepat dan lebih ramping, hanya perlu ingin mewujudkan dikandung ide dan mampu menerapkan dalam kasus permen, yang kita memanjakan orang dari WG21.
? : #, )) ...


Latar belakang


Topik plugin cukup menarik, karena memungkinkan Anda untuk membuat fungsionalitas baru dalam Perangkat Lunak (perangkat lunak) tanpa membuat perubahan pada inti program, tetapi pada saat yang sama, antarmuka untuk interaksi harus dipikirkan dan ditulis: Perangkat Lunak <-> Plugins Manager <-> Plugins .


Saya memiliki pengalaman (tidak berhasil) dalam mewawancarai perusahaan yang memiliki sistem plug-in sendiri untuk sistem embedded, karena kompleksitas arsitektur di mana saya gagal dalam tugas pengujian. Ada banyak makro di dalam kelas dasar dari mana ia diturunkan, dan banyak hal yang membuat kehidupan sehari-hari programmer kelabu pada saat menggunakan solusi seperti itu ...


Pada salah satu momen pendidikan mandiri, dan membaca artikel tentang C ++ 17, diputuskan untuk mengkonsolidasikan pengetahuan yang diperoleh saat menulis sistem plug-in yang akan dimengerti dan mudah digunakan.


Seberapa buruk atau baiknya saya melakukannya - menghakimi Anda, orang Khabrovit tersayang ...


Ulasan


Fitur perpustakaan


  • Plugin sebagai layanan (dijalankan dalam perdagangan terpisah)
  • Bongkar plugin yang tidak digunakan secara otomatis

Pro


  • Kemudahan penggunaan
  • Eksekusi tugas yang tidak sinkron
  • Desain hanya header

Cons


  • Jika sebuah plugin baru dimasukkan ke dalam sistem, itu harus dikompilasi dengan versi kompiler yang sama dengan manajer yang mengunduhnya (serta libstdc ++) untuk kompatibilitas ABI
  • Tembolok konstan dari std :: any ke tipe yang digunakan?
  • Validasi masa depan?

Pembuatan plugin


 class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) { //     subscribe<2>("sum2", [](std::any a, std::any b)-> std::any { return std::any_cast<int>(a) + std::any_cast<int>(b); }, "  " ); } }; 

Unduh plugin


 std::shared_ptr<micro::plugins> manager = micro::plugins::get(); std::shared_ptr<micro::iplugin> myplugin = manager->get_plugin("myplugin"); if (myplugin && myplugin->has<2>("sum2")) { std::shared_future<std::any> result = myplugin->run<2>("sum2", 25, 25); result.wait(); std::cout << std::any_cast<int>(result.get()) << std::endl; } 

Lihat contoh lebih rinci di halaman proyek.


Alih-alih sebuah kesimpulan


Saya sangat senang membaca artikel informatif tentang Habra di C ++ (dan tidak hanya di C ++),
Saya harap Anda akan menemukan artikel ini menarik dan setidaknya informatif.


Menurut pendapat saya yang sederhana, Anda dapat menggunakan lib di prod, biarkan mereka melihat C + + lebih otoritatif dan mengucapkan kata-kata mereka, kode sumber didokumentasikan dengan baik dan tidak banyak dari mereka - sekitar 1000 baris.


Tautan ke proyek


microplugins

Source: https://habr.com/ru/post/id422401/


All Articles