LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
detail::dispatcher< Ret, IVisitor, F, N > Class Template Reference

#include <visitor.h>

Classes

struct  visitorCallImpl
 

Public Member Functions

template<typename Tuple , std::size_t... Is>
Ret operator() (F &&f, const Tuple &t, index_sequence< Is...>)
 

Private Member Functions

template<std::size_t I, typename Tuple >
void set_index (const Tuple &t)
 

Private Attributes

std::array< std::size_t, N > index
 

Detailed Description

template<typename Ret, typename IVisitor, typename F, std::size_t N>
class detail::dispatcher< Ret, IVisitor, F, N >

Definition at line 247 of file visitor.h.

Member Function Documentation

template<typename Ret, typename IVisitor, typename F, std::size_t N>
template<typename Tuple , std::size_t... Is>
Ret detail::dispatcher< Ret, IVisitor, F, N >::operator() ( F &&  f,
const Tuple &  t,
index_sequence< Is...>   
)
inline

Definition at line 276 of file visitor.h.

277  {
278  const int dummy[] = {(set_index<Is>(t), 0)...};
279  static_cast<void>(dummy); // silent the warning unused variable
280  constexpr auto a = GetAllOverload<Ret, F&&, Tuple>::
281  template get<sizeof...(Is), typename IVisitor::tuple_type>();
282  auto func = multi_array_getter<N>::get(a, index);
283  return (*func)(f, t);
284  }
static constexpr auto get(const T &a, const std::array< std::size_t, N > &index) -> decltype(multi_array_getter< I-1 >::get(a[index[N-I]], index))
Definition: visitor.h:137
std::array< std::size_t, N > index
Definition: visitor.h:250
template<typename Ret, typename IVisitor, typename F, std::size_t N>
template<std::size_t I, typename Tuple >
void detail::dispatcher< Ret, IVisitor, F, N >::set_index ( const Tuple &  t)
inlineprivate

Definition at line 266 of file visitor.h.

267  {
268  using VisitorType = typename IVisitorImplType<IVisitor, visitorCallImpl>::type;
269  VisitorType visitor;
270  visitor.setIndexPtr(index[I]);
271 
272  std::get<I>(t).accept(visitor);
273  }
std::array< std::size_t, N > index
Definition: visitor.h:250

Member Data Documentation

template<typename Ret, typename IVisitor, typename F, std::size_t N>
std::array<std::size_t, N> detail::dispatcher< Ret, IVisitor, F, N >::index
private

Definition at line 250 of file visitor.h.


The documentation for this class was generated from the following file: