47 using parse_result_type = abi::map<abi::string, option_result, std::less<>>;
61 ES_API(CPPESSENCE) explicit operator
bool() const noexcept;
67 [[nodiscard]] ES_API(CPPESSENCE) std::span<const abstract::
option> options() const noexcept;
73 [[nodiscard]] ES_API(CPPESSENCE) const parse_result_type& cached_result() const noexcept;
79 [[nodiscard]] ES_API(CPPESSENCE) std::span<const abi::
string> unmatched_args() const noexcept;
85 ES_API(CPPESSENCE)
void add_option(abstract::
option option) const;
90 ES_API(CPPESSENCE)
void parse() const;
97 ES_API(CPPESSENCE)
void parse(std::int32_t argc,
char* argv[]) const;
103 ES_API(CPPESSENCE)
void parse(std::span<const abi::
string> args) const;
108 ES_API(CPPESSENCE)
void show_help() const;
114 ES_API(CPPESSENCE)
void on_error(const output_handler& handler) const;
120 ES_API(CPPESSENCE)
void on_output(const output_handler& handler) const;
127 template <std::default_initializable T>
128 requires std::is_class_v<T>
131 auto&& mapping = cached_result();
133 if (mapping.empty()) {
138 auto handler = [&](
const auto& item) {
139 if (
const auto iter = mapping.find(std::string_view{item.name}); iter != mapping.end()) {
140 iter->second.option.set_target_from_cache(item.reference);
144 meta::runtime::enumerate_data_members(result, [&](
const auto&... members) { (handler(members), ...); });
152 std::unique_ptr<impl> impl_;