이름이 지정된 프로그램 옵션 (예 : --files
)을 허용하지 않는 위치 지정 목록 프로그램 옵션을 boost_program_options
으로 만들고 싶습니다.boost :: program_options의 위치 옵션에 설명을 추가하는 방법은 무엇입니까?
I가 다음 코드 조각 다음과 같이 내가 파일을 위치 인수 목록으로 목록을 읽을 수
#include <boost/program_options.hpp>
#include <iostream>
#include <string>
#include <vector>
namespace po = boost::program_options;
int main(int argc, const char* argv[]) {
po::options_description desc("Allowed options");
desc.add_options()("help", "produce help message")
("files", po::value<std::vector<std::string>>()->required(), "list of files");
po::positional_options_description pos;
pos.add("files", -1);
po::variables_map vm;
try {
po::store(po::command_line_parser(argc, argv).options(desc).positional(pos).run(), vm);
po::notify(vm);
} catch(const po::error& e) {
std::cerr << "Couldn't parse command line arguments properly:\n";
std::cerr << e.what() << '\n' << '\n';
std::cerr << desc << '\n';
return 1;
}
if(vm.count("help") || !vm.count("files")) {
std::cout << desc << "\n";
return 1;
}
}
문제는 다음과 같습니다 불행하게도이 같은뿐만 아니라
./a.out file1 file2 file3
을하지만 (이 해제하고 싶습니다.)
./a.out --files file1 file2 file3
문제는 도움이되는 것입니다. 신분증 :
./a.out
Couldn't parse command line arguments properly:
the option '--files' is required but missing
Allowed options:
--help produce help message
--files arg list of files
그래서 내 원하는 시나리오는 이상 (유사한 OS)와 같은 것 :
./a.out
Couldn't parse command line arguments properly:
[FILES ...] is required but missing
Allowed options:
--help produce help message
--optionx some random option used in future
[FILE ...] list of files
I 작동이 중지 desc.add_option()(...)
에서 files
옵션을 제거한 후에는 그래서 내가 거기에 필요 믿습니다.
왜 명명 된 매개 변수로 입력 파일을 지정하는 기능을 제거해야합니까? 그것은 무엇이든 해가되지 않으므로 왜 그걸 사용하지 못하게합니까? –
@ DanMašek 이것은 사용자에게 분명하지 않습니다. 두 입력 모두 유효한 입력 전략이 될 수 있기 때문입니다. (특별히 하나만 원하면 도움을받을 수 있습니다.) – Patryk
OK. 저에게 가장 침략적이지 않은 해결책이 있습니다. 인수 옵션 목록 전체에 위치 옵션이 계속 흩어져 있지만 더 쉽게 유효성 검사를 추가하여 제한 할 수 있습니다. –