Tôi sử dụng thư viện boost.program_options. Hãy xem xét trường hợp đơn giản hóa này.
po::options_description desc("Cách sử dụng");
desc.add_options()
("gỡ cài đặt,u", "gỡ cài đặt chương trình")
("custom,c", po::wvalue(), "chỉ định hành động tùy chỉnh");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
Tôi muốn tạo lỗi trên dòng lệnh như thế này:
testprog.exe -u c- action1
Lưu ý rằng người dùng đã gõ nhầm "c-" thay vì "-c". Nhưng trình phân tích cú pháp hiểu đây là một tùy chọn -u. Tôi nên xử lý tình huống này như thế nào?
Tôi muốn tạo ra lỗi trên dòng lệnh như vậy:
testprog.exe -u c- action1
Lưu ý, người dùng đã mắc lỗi đánh máy "c-" thay vì "-c". Nhưng trình phân tích cú pháp hiểu đây là một tùy chọn -u. Làm cách nào để xử lý các trường hợp như vậy?
hướng dẫn chương trình_options
Thư viện không chấp nhận bất kỳ đối số vị trí nào và bạn sẽ có được hành vi mong muốn
Mã hóa & biên dịch:
macmini:stackoverflow samm$ cat po.cc
#include
#include
#include
int
chính(int argc, char* argv[])
{
không gian tên po = boost::program_options;
po::options_description desc("Cách sử dụng");
desc.add_options()
("gỡ cài đặt,u", "gỡ cài đặt chương trình")
("custom,c", po::wvalue(), "chỉ định hành động tùy chỉnh")
;
po::variables_map vm;
po::command_line_parser cmd_line( argc, argv );
cmd_line.options( desc );
cmd_line.positional( po::positional_options_description() );
thử {
po::store( cmd_line.run(), vm );
po::notify(vm);
} bắt ( const std::Exception& e ) {
std::cerr << e.what() << std::endl;
return -1;
}
return 0;
}
macmini:stackoverflow samm$ g++ po.cc -I /opt/local/include -L/opt/local/lib -lboost_program_options -Wl,-rpath,/opt/local/lib
chạy:
macmini:stackoverflow samm$ ./a.out -u c- action1
quá nhiều lựa chọn vị trí
macmini: stackoverflow samm$ ./a.out -u -c action1
macmini:stackoverflow samm$
Tôi là một lập trình viên xuất sắc, rất giỏi!