2 A meta function which supports using named template type parameters
3 via Boost.Parameter to specify the template type parameters for
4 the boost::signals2::signal class.
6 Author: Frank Mori Hess <fmhess@users.sourceforge.net>
9 // Copyright Frank Mori Hess 2009
10 // Use, modification and
11 // distribution is subject to the Boost Software License, Version
12 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
13 // http://www.boost.org/LICENSE_1_0.txt)
15 // For more information, see http://www.boost.org
17 #ifndef BOOST_SIGNALS2_SIGNAL_TYPE_HPP
18 #define BOOST_SIGNALS2_SIGNAL_TYPE_HPP
20 #include <boost/parameter/config.hpp>
22 #if BOOST_PARAMETER_MAX_ARITY < 7
23 #error Define BOOST_PARAMETER_MAX_ARITY as 7 or greater.
26 #include <boost/parameter/template_keyword.hpp>
27 #include <boost/parameter/parameters.hpp>
28 #include <boost/parameter/required.hpp>
29 #include <boost/parameter/optional.hpp>
30 #include <boost/parameter/value_type.hpp>
31 #include <boost/type_traits/is_function.hpp>
32 #include <boost/type_traits/function_traits.hpp>
33 #include <boost/signals2/signal.hpp>
42 BOOST_PARAMETER_TEMPLATE_KEYWORD(signature_type)
43 BOOST_PARAMETER_TEMPLATE_KEYWORD(combiner_type)
44 BOOST_PARAMETER_TEMPLATE_KEYWORD(group_type)
45 BOOST_PARAMETER_TEMPLATE_KEYWORD(group_compare_type)
46 BOOST_PARAMETER_TEMPLATE_KEYWORD(slot_function_type)
47 BOOST_PARAMETER_TEMPLATE_KEYWORD(extended_slot_function_type)
48 BOOST_PARAMETER_TEMPLATE_KEYWORD(mutex_type)
49 } // namespace keywords
53 typename A1 = parameter::void_,
54 typename A2 = parameter::void_,
55 typename A3 = parameter::void_,
56 typename A4 = parameter::void_,
57 typename A5 = parameter::void_,
58 typename A6 = parameter::void_
62 typedef parameter::parameters<
63 parameter::required<keywords::tag::signature_type, is_function<boost::mpl::_> >,
64 parameter::optional<keywords::tag::combiner_type>,
65 parameter::optional<keywords::tag::group_type>,
66 parameter::optional<keywords::tag::group_compare_type>,
67 parameter::optional<keywords::tag::slot_function_type>,
68 parameter::optional<keywords::tag::extended_slot_function_type>,
69 parameter::optional<keywords::tag::mutex_type>
74 typedef typename parameter_spec::bind<A0, A1, A2, A3, A4, A5, A6>::type
77 typedef typename parameter::value_type<args, keywords::tag::signature_type>::type
80 typedef typename parameter::value_type
83 keywords::tag::combiner_type,
86 typename boost::function_traits<signature_type>::result_type
88 >::type combiner_type;
91 parameter::value_type<args, keywords::tag::group_type, int>::type group_type;
94 parameter::value_type<args, keywords::tag::group_compare_type, std::less<group_type> >::type
98 parameter::value_type<args, keywords::tag::slot_function_type, function<signature_type> >::type
102 parameter::value_type
105 keywords::tag::extended_slot_function_type,
106 typename detail::extended_signature<function_traits<signature_type>::arity, signature_type>::function_type
108 extended_slot_function_type;
111 parameter::value_type<args, keywords::tag::mutex_type, mutex>::type mutex_type;
120 extended_slot_function_type,
124 } // namespace signals2
127 #endif // BOOST_SIGNALS2_SIGNAL_TYPE_HPP