有许多众所周知的命令行参数解析器,例如 argp 或 C++ 的 boost::program_options 的一个子集。
例如,我最近尝试写一个让我解析 C++ 中的简单场景,如下所示:
int main (int argc, char *argv[]) {
auto state = parse (argc, argv);
const auto foo = mandatory<int> (state, {'f', "foo"});
const auto bar = optional_with_default<int>(state, {'b', "bar"}, 42);
const auto frob = optional<std::string> (state, {'F', "frob"});
if (!frob) {
...
}
}
但很快发现解析与位置无关的标志并非易事(例如-fgx
,将与 相同-f -xg
),然后在混合中抛出具有值 args 的与位置无关的标志变得非常重要(例如tar -xvzf frob.tar.gz
)。
只有经验主义才能使问题变得明显。例如,我没有找到任何关于此搜索的内容。
您知道有关该主题的任何好的资源吗?你自己的最佳实践是什么?
注意:尽管我命名了一些 C++ 示例,但这个问题应该与语言无关。我要求算法和一般建议。