2010-05-26 16 views
6

boost kullanıyorum :: program_options böyle:Can boost :: program_options "-" dışında bir ayırıcı kullanın?

namespace po = boost::program_options; 
po::options_description desc("Options"); 
desc.add_options() 
    ("help,?", "Show Options") 
    ("capture-file,I", po::value<string>(), "Capture File") 
    ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format") 
    ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File"); 

po::variables_map vm; 
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm); 

bunun işe yaradığını komut satırı parametresini -I hithere geçmesi, ancak ben /I hithere boost boost kullanılarak başarısız dönüşüm "bir what() ile boost::bad_any_cast atar geçerseniz :: any_cast".

/ -delimitted veya - ayrılan seçenekler ayrıştırmak için program_options kullanmak mümkün mü? Bonus sorusu, / ve -'un aynı seçeneği ayarlaması için yapılandırılabilir, ancak birbirinin ikili zıtları mıdır? Örneğin, /verbose, ayrıntılı günlük kaydı anlamına gelebilir, oysa -verbose, daha az ayrıntılı günlük kaydı anlamına gelebilir.

cevap

9

, / ve - kullanımı style_t bayrakların uygun kombinasyonu ile command_line_parser sitesindeki style() yöntemi kullanmak için. Örneğin:

po::store(po::command_line_parser(ac, av) 
    .options(desc) 
    .style(po::command_line_style::default_style 
     | po::command_line_style::case_insensitive 
     | po::command_line_style::allow_slash_for_short 
     | po::command_line_style::allow_long_disguise) 
    /*.positional(pd)*/ 
    .run(), vm); 

(sağlar allow_long_disguise/ uzun seçeneği başlatın.)

Muhtemelen / ve - karşıtını yapabilir additional parser Kendi ekleyerek; Ancak, bu çok standart dışı ve bu nedenle son kullanıcılar için potansiyel olarak kafa karıştırıcı olurdu, bu yüzden bu iyi bir fikir olduğundan emin değilim.

+0

Muhtemelen haklısınız. 'Mağaza' çağrısından sonra hangi sınırlayıcının kullanıldığını belirlemek mümkün mü? –

+0

Kendi ek çözümleyicinizi kullanmıyorsanız, sanmıyorum. –

+0

Tamam, bu zaten bir bonus soruydu. :) –

İlgili konular