أطر CLI لـ C++: كتابة تطبيقات وحدة التحكم بسرعة وسهولة

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

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

ابدأ الدورة

أطر CLI لـ C++: كتابة تطبيقات وحدة التحكم بسرعة وسهولة



يعد إنشاء واجهة سطر أوامر (CLI) عالية الجودة جزءًا مهمًا من التطوير بلغة C++. سرعان ما يصبح التحليل اليدوي للوسائط عبر argc/argv و getopt مرهقًا وعرضة للأخطاء، خاصة مع وجود عدد كبير من الخيارات. تأتي المكتبات المتخصصة - أطر CLI - للإنقاذ. فهي تعمل على أتمتة التحليل، وإنشاء التعليمات، والتحقق من الأنواع، وتساعد في كتابة كود أنظف وأكثر قابلية للصيانة.



في هذه المقالة، سنلقي نظرة على ثلاثة من أشهر وأحدث أطر CLI لـ C++: CLI11 و cxxopts و argparse. ستتعرف على نقاط قوتها، وسترى أمثلة على الكود، وستتمكن من اختيار الأداة المناسبة لمشروعك.



1. CLI11 - المعيار الحديث



CLI11 هي مكتبة من نوع header-only، وتعتبر بحق واحدة من أفضل الحلول لـ C++11 والإصدارات الأحدث. تقدم واجهة برمجة تطبيقات بديهية، والتحقق القوي، والتوليد التلقائي للتعليمات.



الميزات الرئيسية:

  • Header-only: لا تتطلب بناء - فقط قم بتضمين ملف الرأس.
  • تعليمات تلقائية: تعمل الأعلام -h و --help فورًا.
  • التحقق: أدوات تحقق مدمجة ومخصصة للوسائط (نطاق، تعبير منتظم، وجود ملف).
  • دعم الأوامر الفرعية: مثالي للأدوات المساعدة المعقدة (مثل git أو docker).
  • التنسيق: إخراج تعليمات قابل للتخصيص.


مثال على استخدام CLI11:

تطبيق بسيط يقبل اسمًا وعلامة ترحيب اختيارية:

#include <CLI/CLI.hpp>#include <iostream>

int main(int argc, char** argv) { CLI::App app{"عرض CLI11"};

std::string name; bool greet = false;

app.add_option("-n,--name", name, "اسمك")->required(); app.add_flag("-g,--greet", greet, "طباعة تحية");

CLI11_PARSE(app, argc, argv);

std::cout << "مرحبًا، " << name << "!" << std::endl; if (greet) { std::cout << "أتمنى لك يومًا سعيدًا!" << std::endl; } return 0;}

كيف يعمل: تقوم المكتبة بتحليل الوسائط بنفسها، وتتحقق من إلزامية الخيار --name، وتنشئ تعليمات عند استدعاء ./app --help.



2. cxxopts - البساطة وخفة الوزن



cxxopts هي مكتبة أخرى من نوع header-only، تركز على البساطة والحد الأدنى. إنها مناسبة تمامًا للأدوات المساعدة الصغيرة التي لا تحتاج إلى أوامر فرعية، ولكن readability الكود مهم.



الميزات الرئيسية:

  • API بسيط: إضافة الخيارات من خلال سلاسل الاستدعاءات.
  • تحويل الأنواع تلقائيًا: int، double، string وغيرها.
  • دعم الوسائط الموضعية.
  • بادئات قابلة للتخصيص: يمكن استخدام - أو --.


مثال على استخدام cxxopts:

#include <cxxopts.hpp>#include <iostream>

int main(int argc, char** argv) { cxxopts::Options options("myapp", "مثال cxxopts");

options.add_options() ("f,file", "اسم الملف", cxxopts::value<std::string>()) ("v,verbose", "إخراج مفصل", cxxopts::value<bool>()->default_value("false")) ("h,help", "إظهار التعليمات");

auto result = options.parse(argc, argv);

if (result.count("help")) { std::cout << options.help() << std::endl;

توصيات