13#ifndef dealii_base_mutable_bind_h
14#define dealii_base_mutable_bind_h
77 template <
typename ReturnType,
class... FunctionArgs>
86 std::tuple<std::remove_cv_t<std::remove_reference_t<FunctionArgs>>...>;
92 template <
typename FunctionType>
99 template <
typename FunctionType>
106 template <
typename FunctionType>
152 const std::function<ReturnType(FunctionArgs...)>
function;
182 template <
typename ReturnType,
class... FunctionArgs>
190 template <
typename ReturnType,
class... FunctionArgs>
205 template <
typename ReturnType,
class... FunctionArgs>
212 template <
typename ReturnType,
class... FunctionArgs>
219 template <
typename ReturnType,
class... FunctionArgs>
220 template <
typename FunctionType>
222 FunctionType function,
223 FunctionArgs &&...arguments)
225 , arguments(
std::make_tuple(
std::move(arguments)...))
230 template <
typename ReturnType,
class... FunctionArgs>
231 template <
typename FunctionType>
232 MutableBind<ReturnType, FunctionArgs...>::MutableBind(FunctionType function,
233 TupleType &&arguments)
235 , arguments(
std::move(arguments))
240 template <
typename ReturnType,
class... FunctionArgs>
241 template <
typename FunctionType>
242 MutableBind<ReturnType, FunctionArgs...>::MutableBind(FunctionType function)
248 template <
typename ReturnType,
class... FunctionArgs>
250 MutableBind<ReturnType, FunctionArgs...>::operator()()
const
252 return std::apply(function, arguments);
257 template <
typename ReturnType,
class... FunctionArgs>
259 MutableBind<ReturnType, FunctionArgs...>::set_arguments(
260 FunctionArgs &&...args)
262 arguments = std::make_tuple(std::move(args)...);
267 template <
typename ReturnType,
class... FunctionArgs>
269 MutableBind<ReturnType, FunctionArgs...>::set_arguments(TupleType &&args)
271 arguments = std::move(args);
276 template <
typename ReturnType,
class... FunctionArgs>
278 MutableBind<ReturnType, FunctionArgs...>::parse_arguments(
279 const std::string &value_string,
288 template <
typename ReturnType,
class... FunctionArgs>
289 MutableBind<ReturnType, FunctionArgs...>
293 return MutableBind<ReturnType, FunctionArgs...>(function,
294 std::move(arguments)...);
299 template <
typename ReturnType,
class... FunctionArgs>
300 MutableBind<ReturnType, FunctionArgs...>
303 return MutableBind<ReturnType, FunctionArgs...>(function);
308 template <
typename ReturnType,
class... FunctionArgs>
309 MutableBind<ReturnType, FunctionArgs...>
310 mutable_bind(std::function<ReturnType(FunctionArgs...)> function,
313 return MutableBind<ReturnType, FunctionArgs...>(function,
314 std::move(arguments)...);
319 template <
typename ReturnType,
class... FunctionArgs>
320 MutableBind<ReturnType, FunctionArgs...>
321 mutable_bind(std::function<ReturnType(FunctionArgs...)> function)
323 return MutableBind<ReturnType, FunctionArgs...>(function);
ReturnType operator()() const
MutableBind(FunctionType function)
void set_arguments(FunctionArgs &&...arguments)
MutableBind(FunctionType function, TupleType &&arguments)
const std::function< ReturnType(FunctionArgs...)> function
void set_arguments(TupleType &&arguments)
MutableBind(FunctionType function, FunctionArgs &&...arguments)
void parse_arguments(const std::string &value_string, const Patterns::PatternBase &pattern= *Patterns::Tools::Convert< TupleType >::to_pattern())
std::tuple< std::remove_cv_t< std::remove_reference_t< FunctionArgs > >... > TupleType
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
MutableBind< ReturnType, FunctionArgs... > mutable_bind(ReturnType(*function)(FunctionArgs...), std_cxx20::type_identity_t< FunctionArgs > &&...arguments)
typename type_identity< T >::type type_identity_t