Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename T>
- struct function_traits;
- template<typename R, typename ...Args>
- struct function_traits<std::function<R(Args...)>>
- {
- static const size_t nargs = sizeof...(Args);
- typedef R result_type;
- template <size_t i>
- struct arg
- {
- typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
- };
- };
- template <Filter T, Filter U>
- auto addToPipe(T&& left, U&& right)
- {
- return [left = std::move(left), right = std::move(right)](typename T::resource_t& frame) {
- return right(left(frame));
- };
- }
- template <typename Pipe, Filter U>
- auto addToPipe(Pipe&& left, U&& right)
- {
- using input_t = typename function_traits<Pipe>::arg<0>::type;
- using pipe_return_t = typename function_traits<Pipe>::result_type;
- using middle_t = typename U::resource_t;
- static_assert(std::is_same_v<pipe_return_t, middle_t>);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement