mqtt_cpp
visitor_util.hpp
Go to the documentation of this file.
1 // Copyright Takatoshi Kondo 2017
2 //
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #if !defined(MQTT_VISITOR_UTIL_HPP)
8 #define MQTT_VISITOR_UTIL_HPP
9 
10 #include <mqtt/namespace.hpp>
11 #include <mqtt/variant.hpp>
12 
13 namespace MQTT_NS {
14 
15 template <typename... Lambdas>
17 
18 template <typename Lambda1, typename... Lambdas>
19 struct lambda_visitor<Lambda1, Lambdas...>
20  : Lambda1, lambda_visitor<Lambdas...> {
21  using Lambda1::operator();
23  lambda_visitor(Lambda1 lambda1, Lambdas... lambdas)
24  : Lambda1(lambda1), lambda_visitor<Lambdas...>(lambdas...) {}
25 };
26 
27 
28 template <typename Lambda1>
29 struct lambda_visitor<Lambda1> : Lambda1 {
30  using Lambda1::operator();
31  lambda_visitor(Lambda1 lambda1)
32  : Lambda1(lambda1) {}
33 };
34 
35 
36 template <typename... Lambdas>
37 inline lambda_visitor<Lambdas...> make_lambda_visitor(Lambdas&&... lambdas) {
38  return { std::forward<Lambdas>(lambdas)... };
39 }
40 
41 } // namespace MQTT_NS
42 
43 #endif // MQTT_VISITOR_UTIL_HPP
Definition: any.hpp:27
lambda_visitor< Lambdas... > make_lambda_visitor(Lambdas &&... lambdas)
Definition: visitor_util.hpp:37
lambda_visitor(Lambda1 lambda1, Lambdas... lambdas)
Definition: visitor_util.hpp:23
lambda_visitor(Lambda1 lambda1)
Definition: visitor_util.hpp:31
Definition: visitor_util.hpp:16