44 using OptionProcessor = std::function<bool(
const char *)>;
53 const char *description;
54 OptionProcessor processor;
57 const char *binaryName;
62 std::ostream *outStream = &std::cerr;
64 std::map<cstring, std::shared_ptr<const Option>> options;
65 std::vector<cstring> optionOrder;
66 std::vector<const char *> additionalUsage;
67 std::vector<const char *> remainingOptions;
69 bool collectUnknownOptions =
false;
71 void setOutStream(std::ostream *out) { outStream = out; }
72 void registerUsage(
const char *msg) { additionalUsage.push_back(msg); }
73 void registerOption(
const char *option,
76 OptionProcessor processor,
77 const char *description,
80 explicit Options(std::string_view message)
81 : binaryName(nullptr), message(message), compileCommand(
"") {}
82 virtual ~Options() =
default;
99 virtual std::vector<const char *> *
process(
int argc,
char *
const argv[]);
110 virtual std::vector<const char *> *
process_options(
int argc,
char *
const argv[]);
112 [[nodiscard]]
virtual const char *getIncludePath()
const = 0;
113 cstring getCompileCommand() {
return compileCommand; }
114 cstring getBuildDate() {
return buildDate; }
115 cstring getBinaryName() {
return cstring(binaryName); }
116 virtual void usage();