cmdopt2: add convenience function for lambda handlers
This commit is contained in:
parent
1e4d47acf9
commit
d06ee4995c
@ -36,6 +36,7 @@ namespace cruft::cmdopt2 {
|
|||||||
template <typename BaseT>
|
template <typename BaseT>
|
||||||
struct ops_t : argument_t {
|
struct ops_t : argument_t {
|
||||||
template <typename ValueT>
|
template <typename ValueT>
|
||||||
|
requires (!std::is_convertible_v<ValueT, acceptor1_t>)
|
||||||
BaseT bind (ValueT&&) = delete;
|
BaseT bind (ValueT&&) = delete;
|
||||||
|
|
||||||
template <typename ValueT>
|
template <typename ValueT>
|
||||||
@ -86,6 +87,14 @@ namespace cruft::cmdopt2 {
|
|||||||
return get ();
|
return get ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BaseT
|
||||||
|
bind (acceptor1_t _acceptor1)
|
||||||
|
{
|
||||||
|
CHECK (!acceptor1);
|
||||||
|
acceptor1 = std::move (_acceptor1);
|
||||||
|
return get ();
|
||||||
|
}
|
||||||
|
|
||||||
BaseT
|
BaseT
|
||||||
get (void) const
|
get (void) const
|
||||||
{
|
{
|
||||||
|
@ -262,6 +262,45 @@ test_repeated (cruft::TAP::logger &tap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
static void
|
||||||
|
test_bind (cruft::TAP::logger &tap)
|
||||||
|
{
|
||||||
|
static constexpr
|
||||||
|
char const* VALUES[] = {
|
||||||
|
"one",
|
||||||
|
"two",
|
||||||
|
"three"
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<char const*> values;
|
||||||
|
|
||||||
|
using namespace cruft::cmdopt2;
|
||||||
|
parser p ("test suite");
|
||||||
|
p.add (
|
||||||
|
keyword ("value")
|
||||||
|
.flag ('v')
|
||||||
|
.repeat (true)
|
||||||
|
.bind ([&] (char const *str) { values.push_back (str); })
|
||||||
|
);
|
||||||
|
|
||||||
|
char const *argv[] = { "./cmd", "--value", VALUES[0], "--value", VALUES[1], "--value", VALUES[2] };
|
||||||
|
auto const consumed = p.parse (std::ssize (argv), argv);
|
||||||
|
|
||||||
|
tap.expect_eq (consumed, std::ssize (argv), "bound function: consumed");
|
||||||
|
|
||||||
|
tap.expect (
|
||||||
|
std::equal (
|
||||||
|
std::begin (values),
|
||||||
|
std::end (values),
|
||||||
|
std::begin (VALUES),
|
||||||
|
std::end (VALUES)
|
||||||
|
),
|
||||||
|
"bound function: values"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
@ -270,5 +309,6 @@ int main ()
|
|||||||
test_presence (tap);
|
test_presence (tap);
|
||||||
test_required (tap);
|
test_required (tap);
|
||||||
test_repeated (tap);
|
test_repeated (tap);
|
||||||
|
test_bind (tap);
|
||||||
return tap.status ();
|
return tap.status ();
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user