यदि आप कमांड लाइन पार्सर का उपयोग कर रहे हैं, तो विभिन्न शैलियों को सेट करने का एक तरीका है। तो समाधान केवल लंबे विकल्पों का उपयोग करना होगा और allow_long_disguise शैली को सक्षम करना होगा जो लंबे विकल्पों को एक डैश (यानी "-long_option") के साथ निर्दिष्ट करने की अनुमति देता है। यहाँ एक उदाहरण है:
#include <iostream>
#include <boost/program_options.hpp>
namespace options = boost::program_options;
using namespace std;
int
main (int argc, char *argv[])
{
options::options_description desc (string (argv[0]).append(" options"));
desc.add_options()
("h", "Display this message")
;
options::variables_map args;
options::store (options::command_line_parser (argc, argv).options (desc)
.style (options::command_line_style::default_style |
options::command_line_style::allow_long_disguise)
.run(), args);
options::notify (args);
if (args.count ("h"))
{
cout << desc << endl;
return 0;
}
}
हालांकि वर्णन उत्पादन के साथ एक छोटे से समस्या हो जाएगा:
$ ./test --h
./test options:
--h Display this message
और वह एक है क्योंकि यह है कि क्या इस उत्पादन बनाने के लिए इस्तेमाल किया जा रहा है ठीक करने के लिए मुश्किल है:
std::string
option_description::format_name() const
{
if (!m_short_name.empty())
return string(m_short_name).append(" [ --").
append(m_long_name).append(" ]");
else
return string("--").append(m_long_name);
}
दिमाग में आने वाला एकमात्र फिक्स परिणामस्वरूप स्ट्रिंग में "-" के साथ बदल रहा है। उदाहरण के लिए:
#include <iostream>
#include <sstream>
#include <boost/program_options.hpp>
#include <boost/algorithm/string/replace.hpp>
namespace options = boost::program_options;
using namespace std;
int
main (int argc, char *argv[])
{
options::options_description desc (string (argv[0]).append(" options"));
desc.add_options()
("h", "Display this message")
;
options::variables_map args;
options::store (options::command_line_parser (argc, argv).options (desc)
.style (options::command_line_style::default_style |
options::command_line_style::allow_long_disguise)
.run(), args);
options::notify (args);
if (args.count ("h"))
{
std::stringstream stream;
stream << desc;
string helpMsg = stream.str();
boost::algorithm::replace_all (helpMsg, "--", "-");
cout << helpMsg << endl;
return 0;
}
}
सबसे अच्छी बात आप कर सकते हैं कोड जहां यह प्रिंट खाली लंबे विकल्प का वर्णन ठीक करने और पुस्तकालय के लेखक को एक पैच भेजने के लिए है।
स्रोत
2010-09-01 20:32:49
क्या आप सहायता टेक्स्ट को केवल छोटे विकल्पों को अक्षम करने के लिए चाहते हैं? –
नहीं, मुझे केवल -verbose के बजाय -v दोनों को परिभाषित करने के विकल्प जैसे विकल्प चाहिए। "वी" के बजाए ", v" निर्दिष्ट करना चाल है लेकिन वर्णन की प्रिंट सूची को जोड़ता है। – Novikov