LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
AllowedConfigurationMacro.h
Go to the documentation of this file.
1 #ifndef fhiclcpp_types_AllowedConfigurationMacro_h
2 #define fhiclcpp_types_AllowedConfigurationMacro_h
3 
4 // =====================================================================
5 //
6 // Extern allowed-configuration macro
7 //
8 // Use: Fill in
9 //
10 // =====================================================================
11 
12 #include "cetlib/compiler_macros.h"
13 #include "cetlib/metaprogramming.h"
15 #include "fhiclcpp/types/Name.h"
16 
17 #include <memory>
18 #include <string>
19 
20 namespace fhicl {
21  namespace detail {
22 
23  template <class T, class Enable = void>
25  static std::unique_ptr<fhicl::ConfigurationTable>
26  get(std::string const& /*name*/)
27  {
28  return std::unique_ptr<fhicl::ConfigurationTable>{nullptr};
29  }
30  };
31 
32  template <class T>
34  T,
35  cet::enable_if_type_exists_t<typename T::Parameters>> {
36  static std::unique_ptr<fhicl::ConfigurationTable>
37  get(std::string const& name)
38  {
39  return std::make_unique<typename T::Parameters>(fhicl::Name{name});
40  }
41  };
42  }
43 }
44 
45 #define FHICL_PROVIDE_ALLOWED_CONFIGURATION(klass) \
46  EXTERN_C_FUNC_DECLARE_START \
47  std::unique_ptr<fhicl::ConfigurationTable> allowed_configuration( \
48  std::string const& name) \
49  { \
50  return fhicl::detail::AllowedConfiguration<klass>::get(name); \
51  } \
52  EXTERN_C_FUNC_DECLARE_END
53 
54 #endif /* fhiclcpp_types_AllowedConfigurationMacro_h */
55 
56 // Local Variables:
57 // mode: c++
58 // End:
parameter set interface
typename enable_if_type_exists< T, R >::type enable_if_type_exists_t