33 template <
typename T>
auto operator()(std::shared_ptr<T>
const &obj)
const {
34 if constexpr (std::is_same_v<T, Actor>) {
38 return std::visit(*
this, obj->base_solver);
40 return std::shared_ptr<Actor>{
nullptr};
45template <
typename Actor,
typename Variant>
50template <
typename Actor,
typename Variant>
53 return (optional) ? get_actor_by_type<Actor>(*optional) :
nullptr;
58 template <
typename T>
auto operator()(std::shared_ptr<T>
const &obj)
const {
59 if constexpr (std::is_same_v<T, Actor>) {
63 return std::visit(*
this, obj->base_solver);
70template <
typename Actor,
typename Variant>
75template <
typename Actor,
typename Variant>
77 return (optional) ? has_actor_of_type<Actor>(*optional) :
false;
Get an actor of a specific type, recursively.
auto operator()(std::shared_ptr< T > const &obj) const
Check if an actor of a specific type is active, recursively.
auto operator()(std::shared_ptr< T > const &obj) const
Whether an actor is a layer correction method.
auto has_actor_of_type(Variant const &variant)
Check if an actor of a specific type is active, recursively.
std::shared_ptr< Actor > get_actor_by_type(Variant const &variant)
Get an active actor of a specific type, recursively.