Iros
 
Loading...
Searching...
No Matches
di::NamedArguments< Args > Class Template Reference

A helper class for simulation named arguments in c++. More...

#include <di/util/named_arguments.h>

Public Types

using Type = meta::List<meta::Like<Args&&, typename meta::RemoveCVRef<Args>::Tag>...>
 

Public Member Functions

constexpr NamedArguments (Args &&... args)
 
constexpr auto arguments () &-> Tuple< Args &&... > &
 
constexpr auto arguments () const &-> Tuple< Args &&... > const &
 
constexpr auto arguments () &&-> Tuple< Args &&... > &&
 
constexpr auto arguments () const &&-> Tuple< Args &&... > const &&
 

Detailed Description

A helper class for simulation named arguments in c++.

Template Parameters
ArgsThe types of the named arguments.

This class is used to take a list of named arguments and store them in a form easily accessible by the user. This facility includes the helper functions util::get_named_argument and util::get_named_argument_or which can be used to access the named arguments.

Named arguments are declared using CRTP with the util::NamedArgument class. The current implementation allows all named arguments to be optional, but this may change in the future.

The folllowing example shows how to use this class and related methods:

struct Foo : di::NamedArgument<Foo, i32> {};
struct Bar : di::NamedArgument<Bar, i32> {};
template<di::concepts::Integral T>
struct Baz : di::NamedArgument<di::InPlaceTemplate<Baz>, T> {};
template<typename T>
Baz(T&&) -> Baz<T>; // NOLINT(misc-use-internal-linkage)
template<typename... Args>
requires(di::ValidNamedArguments<di::meta::List<Foo, Bar, di::InPlaceTemplate<Baz>>, Args...>)
constexpr static auto f(Args&&... args) -> i32 {
auto named = di::NamedArguments(di::forward<Args>(args)...);
auto foo_value = di::get_named_argument_or<Foo>(named, 1);
auto bar_value = di::get_named_argument_or<Bar>(named, 2);
return foo_value + bar_value + baz_value;
}
constexpr static void named_arguments() {
ASSERT_EQ(f(), 6);
ASSERT_EQ(f(Foo(5)), 10);
ASSERT_EQ(f(Bar(5)), 9);
ASSERT_EQ(f(Foo(5), Bar(5)), 13);
ASSERT_EQ(f(Foo(5), Bar(5), Baz(5)), 15);
}
See also
NamedArgument
get_named_argument
get_named_argument_or

Member Typedef Documentation

◆ Type

template<typename... Args>
using di::util::NamedArguments< Args >::Type = meta::List<meta::Like<Args&&, typename meta::RemoveCVRef<Args>::Tag>...>

Constructor & Destructor Documentation

◆ NamedArguments()

template<typename... Args>
di::util::NamedArguments< Args >::NamedArguments ( Args &&... args)
inlineexplicitconstexpr

Member Function Documentation

◆ arguments() [1/4]

template<typename... Args>
auto di::util::NamedArguments< Args >::arguments ( ) && -> Tuple<Args&&...>&&
inlineconstexpr

◆ arguments() [2/4]

template<typename... Args>
auto di::util::NamedArguments< Args >::arguments ( ) & -> Tuple<Args&&...>&
inlineconstexpr

◆ arguments() [3/4]

template<typename... Args>
auto di::util::NamedArguments< Args >::arguments ( ) const && -> Tuple<Args&&...> const&&
inlineconstexpr

◆ arguments() [4/4]

template<typename... Args>
auto di::util::NamedArguments< Args >::arguments ( ) const & -> Tuple<Args&&...> const&
inlineconstexpr

The documentation for this class was generated from the following file: