mirror of https://github.com/procxx/kepka.git
				
				
				
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			946 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			946 B
		
	
	
	
		
			C++
		
	
	
	
| #ifndef MAPBOX_UTIL_VARIANT_VISITOR_HPP
 | |
| #define MAPBOX_UTIL_VARIANT_VISITOR_HPP
 | |
| 
 | |
| #include <utility>
 | |
| 
 | |
| namespace mapbox {
 | |
| namespace util {
 | |
| 
 | |
| template <typename... Fns>
 | |
| struct visitor;
 | |
| 
 | |
| template <typename Fn>
 | |
| struct visitor<Fn> : Fn
 | |
| {
 | |
|     using Fn::operator();
 | |
| 
 | |
|     template<typename T>
 | |
|     visitor(T&& fn) : Fn(std::forward<T>(fn)) {}    
 | |
| };
 | |
| 
 | |
| template <typename Fn, typename... Fns>
 | |
| struct visitor<Fn, Fns...> : Fn, visitor<Fns...>
 | |
| {
 | |
|     using Fn::operator();
 | |
|     using visitor<Fns...>::operator();
 | |
| 
 | |
|     template<typename T, typename... Ts>
 | |
|     visitor(T&& fn, Ts&&... fns)
 | |
|         : Fn(std::forward<T>(fn))
 | |
|         , visitor<Fns...>(std::forward<Ts>(fns)...) {}
 | |
| };
 | |
| 
 | |
| template <typename... Fns>
 | |
| visitor<typename std::decay<Fns>::type...> make_visitor(Fns&&... fns)
 | |
| {
 | |
|     return visitor<typename std::decay<Fns>::type...>
 | |
|         (std::forward<Fns>(fns)...);
 | |
| }
 | |
|     
 | |
| } // namespace util
 | |
| } // namespace mapbox
 | |
| 
 | |
| #endif // MAPBOX_UTIL_VARIANT_VISITOR_HPP
 |