OptionalDelegatedParameter.h
Go to the documentation of this file.
1 #ifndef fhiclcpp_types_OptionalDelegatedParameter_h
2 #define fhiclcpp_types_OptionalDelegatedParameter_h
3 
6 #include "fhiclcpp/types/Name.h"
11 
12 #include <functional>
13 #include <optional>
14 
15 namespace fhicl {
16 
17  //========================================================
19  : public detail::DelegateBase,
21  public:
25  Comment&& comment,
26  std::function<bool()> maybeUse);
27  bool
28  hasValue() const
29  {
30  return pset_ &&
32  }
33 
34  template <typename T>
35  std::optional<T>
37  {
38  if (not pset_) {
39  return std::nullopt;
40  }
41 
42  auto const trimmed_key = detail::strip_first_containing_name(key());
43  return pset_->get_if_present<T>(trimmed_key);
44  }
45 
46  // Obsolete interface
47  template <typename T>
48  bool
49  get_if_present(T& t) const
50  {
51  if (auto result = get_if_present<T>()) {
52  t = *result;
53  return true;
54  }
55  return false;
56  }
57 
58  private:
59  void
60  do_set_value(fhicl::ParameterSet const& pset) override
61  {
62  pset_ = std::make_optional(pset);
63  };
64 
65  std::optional<ParameterSet> pset_{std::nullopt};
66  };
67 }
68 
69 #endif /* fhiclcpp_types_OptionalDelegatedParameter_h */
70 
71 // Local variables:
72 // mode: c++
73 // End:
std::optional< T > get_if_present() const
std::string const & name() const
Definition: ParameterBase.h:43
static QCString result
std::string strip_first_containing_name(std::string const &key)
void do_set_value(fhicl::ParameterSet const &pset) override
std::string const & key() const
Definition: ParameterBase.h:38
std::string const & comment() const
Definition: ParameterBase.h:48
void function(int client, int *resource, int parblock, int *test, int p)