56 using Creator = std::function<std::unique_ptr<Base>(Args...)>;
62 requires std::derived_from<T, Base> && std::constructible_from<T, Args...>
65 return [](Args... args) -> std::unique_ptr<Base> {
66 return std::make_unique<T>(args...);
80 requires std::derived_from<T, Base> && std::constructible_from<T, Args...>
90 static std::vector<std::unique_ptr<Base>>
create(Args... args);
96 static std::vector<std::string>
names(Args... args);
103 static dealii::Patterns::Selection
104 selection(
const std::vector<std::unique_ptr<Base>> &objects);
110 static Base &
select(
const std::vector<std::unique_ptr<Base>> &objects,
111 const std::string &name);
119 static std::vector<Creator> &creators();
124 static std::vector<Creator> defaults();
190 const std::vector<std::unique_ptr<Base>> &objects,
191 const std::string &name)
194 std::find_if(objects.begin(), objects.end(), [&](
const auto &
object) {
195 return object->name() == name;
198 AssertThrow(it != objects.end(),
199 dealii::ExcMessage(
"No entry of the library has the name »" +