سؤال

يوفر Boost.Program_Options منشأة لتمرير الرموز المتعددة عبر وسيطات سطر الأوامر على النحو التالي:

std::vector<int> nums;    

po::options_description desc("Allowed options");
desc.add_options()
    ("help", "Produce help message.")
    ("nums", po::value< std::vector<int> >(&nums)->multitoken(), "Numbers.")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);

ومع ذلك ، ما هي الطريقة المفضلة لقبول عدد ثابت فقط من الحجج؟ الحل الوحيد الذي يمكنني الوصول إليه هو تعيين القيم يدويًا:

int nums[2];    

po::options_description desc("Allowed options");
desc.add_options()
    ("help", "Produce help message.")
    ("nums", "Numbers.")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);

if (vm.count("nums")) {
   // Assign nums
}

هذا يشعر خرقاء بعض الشيء. هل هناك حل أفضل؟

هل كانت مفيدة؟

المحلول

توفر مكتبة Boost فقط الآليات المحددة مسبقًا. لم يجد البحث السريع شيئًا مع عدد ثابت من القيم. ولكن يمكنك إنشاء هذا بنفسك. ال po::value< std::vector<int> >(&nums)->multitoken() هو مجرد متخصص value_semantic صف دراسي. كما ترون ، يقدم هذا الفصل الأساليب min_tokens و max_tokens, ، الذي يبدو أنه يفعل بالضبط ما تريد. إذا نظرت إلى تعريف من صنف typed_value ( هذا هو الكائن الذي يتم إنشاؤه عندما تتصل po::value< std::vector<int> >(&nums)->multitoken()) يمكنك الحصول على فهم كيفية تجاوز الأساليب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top