تكوين تطبيقات C++: المكتبات والأدوات للإعداد المرن

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تكوين التطبيقات بلغة C++: نظرة عامة على الأدوات والمكتبات



نادرًا ما تستغني تطبيقات C++ الحديثة عن الإعدادات الخارجية. تسمح ملفات التكوين بتغيير سلوك البرنامج دون إعادة الترجمة: من مسارات الموارد ومعلمات الاتصال بقاعدة البيانات إلى اختيار الخوارزميات وتمكين/تعطيل الوظائف. في هذه المقالة، سنستعرض أربع أدوات شائعة للعمل مع التكوين بلغة C++: Boost.Program_options، libconfig، nlohmann/json و yaml-cpp.



1. Boost.Program_options — محلل شامل لسطر الأوامر وملفات التكوين



Boost.Program_options — جزء من مكتبة Boost. يسمح بمعالجة موحدة لوسائط سطر الأوامر ومتغيرات البيئة وملفات التكوين. يدعم عدة صيغ (INI، نصوص بسيطة)، لكنه لا يدعم JSON/YAML.



الإمكانيات الرئيسية:

  • توليد تلقائي للمساعدة (--help);
  • التحقق من صحة الأنواع (int, double, string, vector);
  • خيارات هرمية (مجموعات);
  • القراءة من مصادر متعددة مع تحديد الأولوية.


مثال على الاستخدام (قراءة من ملف INI):

#include <boost/program_options.hpp>#include <iostream>#include <fstream>

namespace po = boost::program_options;

int main(int argc, char* argv[]) { po::options_description config("التكوين"); config.add_options() ("database.host", po::value<std::string>()->default_value("localhost"), "مضيف قاعدة البيانات") ("database.port", po::value<int>()->default_value(3306), "منفذ قاعدة البيانات") ("logging.level", po::value<std::string>()->default_value("info"), "مستوى التسجيل");

po::variables_map vm; std::ifstream ifs("app.ini"); if (ifs) { po::store(po::parse_config_file(ifs, config), vm); po::notify(vm); }

std::cout << "المضيف: " << vm["database.host"].as<std::string>() << ""; std::cout << "المنفذ: " << vm["database.port"].as<int>() << ""; return 0;}


2. libconfig — مكتبة خفيفة الوزن بصيغة خاصة



libconfig — مكتبة بلغة C (مع غلاف C++) بصيغة تكوين مدمجة خاصة بها. تدعم التسلسل الهرمي والمصفوفات والمجموعات والتعليقات. تتميز بسرعة تحليل عالية.



صيغة الملف (مثال app.cfg):

database = {    host = "localhost";    port = 3306;    users = [ "admin", "guest" ];};logging = {    level = "info";    file = "/var/log/app.log";};


مثال على القراءة بلغة C++:

#include <libconfig.h++>#include <iostream>

int main() { libconfig::Config cfg; try { cfg.readFile("app.cfg"); std::string host = cfg.lookup("database.host"); int port = cfg.lookup("database.port"); std::cout << "الاتصال بـ " << host << ":" << port << ""; } catch (const libconfig::FileIOException &e) { std::cerr << "خطأ في قراءة الملف"; } catch (const libconfig::ParseException &e) { std::cerr << "خطأ في التحليل: " << e.what() << ""; } return 0;}


3. nlohmann/json — محلل JSON حديث



مكتبة nlohmann/json (JSON for Modern C++) — واحدة من الأكثر شهرة. تعمل بصيغة JSON المستخدمة على نطاق واسع في تطبيقات الويب والخدمات المصغرة. تتميز بتركيب بديهي (عامل []، مكررات).



مثال على قراءة تكوين JSON:

#include <nlohmann/json.hpp>#include <fstream>#include <iostream>

using json = nlohmann::json;

int main() { std::ifstream f("config.json"); json data = json::parse(f);

std::strin

توصيات