-a CLI -ab 파일 또는 CLI -b -ac 파일 또는 CLI -bc 파일 : 나는 당신 같은 플래그를 전달할 수 있습니다 C. 예를 썼다. 여기서 일반적인 생각 만 설명 할 것입니다. 전체 코드는 현재 500 라인 이상이며, 포맷팅 등을 위해 더 많은 유틸리티를 사용합니다.
예를 들어, 나는 프로그램을 help
(이것은 꽤 더미 임)으로 만들고 있습니다.
struct help_opt
{
string owner;
string path;
bool rec;
int depth;
help_opt() : owner(""), path("/"), rec(false), depth(0) { }
};
또 다른 구조체 모델 명령 줄 인수 : 평범 구조체는 프로그램이 기본 값과 함께, 필요한 모든 옵션이 포함되어
struct help_args : public help_opt, public arguments <help_args>
{
template <typename S>
void define(S& s)
{
set(s, owner, "owner", 'w', "force <name> as owner", "name");
set(s, path, "output", 'o', "save all output to <path>", "path");
set(s, rec, "recurse", 'r', "recurse into sub-topics");
set(s, depth, "depth", 'd', "set <number> as maximum depth", "number");
}
string title() const { return "my help"; }
string usage() const { return "help [<options>] [<topic>]"; }
string info() const
{
return
"Display help on <topic>, "
"or list available topics if no <topic> is given.";
}
help_args(int argc, char* argv[]) : arguments(argc, argv) { }
};
클래스 arguments
내가 필요한 모든 인프라입니다. 메타 데이터 (이름, 약어 등)와 함께 모든 인수는 define()
에 정의되어 있으며 각각 set()
메서드를 호출합니다.
인수 s
은 다중 작업을 지원하는 데 사용됩니다. 사용자 입력을 수집하거나, 도움말 텍스트를 작성하거나, 사용자가 제공 한 값을 표시 할 수 있습니다. 그런 다음 각 멤버에 대한 참조를 전달합니다. 각 멤버에는 사용자 입력에 따라 적절한 값이 주어 지거나 기본값이 그대로 유지됩니다. 그런 다음 인수 이름, 약어, 전체 도움말 텍스트 및 선택적으로 매개 변수 이름을 따릅니다. 부울 인수는 매개 변수없이 플래그로 별도로 처리됩니다.
추가 방법 title()
, info()
등은 프로그램에 대한 맞춤 정보 메시지를 지정합니다.
실제 처리는 arguments
의 생성자에 의해 수행됩니다. 이 경우 define()
은 help_args
이며, 차례로 set()
이 arguments
입니다.각 옵션에 대해 명령 행 입력이 스캔되고 필요에 따라 변수가 갱신됩니다. 동시에, gnu 프로그램에서와 마찬가지로 --help
, --usage
, --version
과 같은 옵션에 대해 메타 데이터가 수집되고 출력이 자동으로 생성됩니다.
arguments
에 help_args
이 템플릿 매개 변수로 전달된다는 사실은 템플릿이기 때문에 define()
을 기본 클래스에서 호출 할 수있게 허용하는 것이므로 가상이 아닙니다. 단일 작업 만 필요한 경우 일반 가상 메서드로 다시 전환 할 수 있습니다.
아주 깨끗합니다. 사용할 수있는 도구와 라이브러리가 많다는 것을 알고 있지만 실제로는이 방법을 선호합니다. 준비가 완료되면 구현을 공유 할 수 있습니다. 거의 완료되었습니다.
http://stackoverflow.com/questions/253556/what-parameter-parser-libraries-are-there-for-c를 참조하십시오. 당연히, 나는 나 자신의 인수 해석 라이브러리도 연결하려고한다 : http://www.taenarum.com/software/dropt/ – jamesdlin