|
template<typename Object , typename... Tuples, typename... MemberFunctionArgumentTypesPlain> |
auto | unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Object &&o, Tuples &... ts) -> typename GetFunctionReturnType< decltype(&std::decay_t< Object >::operator())>::type |
|
template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain> |
Result | unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Result(Object::*m)(Args...), Object &o, Tuples &... ts) |
|
template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain> |
Result | unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Result(Object::*m)(Args...), Object &&o, Tuples &... ts) |
|
template<typename Result , typename Object , typename... Args, typename... Tuples, typename... MemberFunctionArgumentTypesPlain> |
Result | unpackAndInvoke (boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Result(Object::*m)(Args...) const, Object const &o, Tuples &... ts) |
|
template<typename Result , typename... Args, typename... Tuples, typename... FunctionArgumentTypesPlain> |
Result | unpackAndInvoke (boost::mp11::mp_list< FunctionArgumentTypesPlain... >, Result(*fct)(Args...), Tuples &... ts) |
|
template<typename Function , typename... Args> |
auto | applyImpl (Function &&f, Args &&... args) -> typename detail::GetFunctionReturnType< std::decay_t< Function > >::type |
|
template<typename T , typename Tuple , typename... Tuples> |
auto & | getImpl (Tuple &t, Tuples &... ts) |
|
template<typename Function , typename... Args>
auto ProcessLib::Graph::detail::applyImpl |
( |
Function && | f, |
|
|
Args &&... | args ) -> typename detail::GetFunctionReturnType<std::decay_t<Function>>::type
|
Invokes the passed function f
.
f
can be a function object, a free function, or a member function pointer. In the latter case, the first entry of args
must be the object for which f
shall be invoked. (The remainder of) args
are an arbitrary number of tuples from which arguments to f
are taken based on their types.
- See also
- ProcessLib::Graph::apply()
Definition at line 213 of file Apply.h.
215{
216 using namespace boost::mp11;
217
218 using FunctionPlain = std::decay_t<Function>;
219 using FlattenedTuple =
221 using FlattenedTupleOfPlainTypes =
222 mp_transform<std::remove_cvref_t, FlattenedTuple>;
223
224 static_assert(
225 boost::mp11::mp_is_set<FlattenedTupleOfPlainTypes>::value,
226 "The types of all elements of all passed tuples must be unique.");
227
228 using FunctionArgumentTypesPlain =
230
231 static_assert(
232 boost::mp11::mp_is_set<FunctionArgumentTypesPlain>::value,
233 "The argument types of the function to be called must be unique.");
234
236 std::forward<Function>(f),
237 std::forward<Args>(args)...);
238}
auto unpackAndInvoke(boost::mp11::mp_list< MemberFunctionArgumentTypesPlain... >, Object &&o, Tuples &... ts) -> typename GetFunctionReturnType< decltype(&std::decay_t< Object >::operator())>::type
References unpackAndInvoke().
Referenced by ProcessLib::Graph::apply(), and ProcessLib::Graph::eval().