mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-01-22 12:28:03 +00:00
39 lines
743 B
C++
39 lines
743 B
C++
#ifndef MAPBOX_UTIL_VARIANT_VISITOR_HPP
|
|
#define MAPBOX_UTIL_VARIANT_VISITOR_HPP
|
|
|
|
namespace mapbox {
|
|
namespace util {
|
|
|
|
template <typename... Fns>
|
|
struct visitor;
|
|
|
|
template <typename Fn>
|
|
struct visitor<Fn> : Fn
|
|
{
|
|
using type = Fn;
|
|
using Fn::operator();
|
|
|
|
visitor(Fn fn) : Fn(fn) {}
|
|
};
|
|
|
|
template <typename Fn, typename... Fns>
|
|
struct visitor<Fn, Fns...> : Fn, visitor<Fns...>
|
|
{
|
|
using type = visitor;
|
|
using Fn::operator();
|
|
using visitor<Fns...>::operator();
|
|
|
|
visitor(Fn fn, Fns... fns) : Fn(fn), visitor<Fns...>(fns...) {}
|
|
};
|
|
|
|
template <typename... Fns>
|
|
visitor<Fns...> make_visitor(Fns... fns)
|
|
{
|
|
return visitor<Fns...>(fns...);
|
|
}
|
|
|
|
} // namespace util
|
|
} // namespace mapbox
|
|
|
|
#endif // MAPBOX_UTIL_VARIANT_VISITOR_HPP
|