<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE header PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
  "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
<!--
Copyright Frank Mori Hess 2009

Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-->
<header name="boost/signals2/signal_type.hpp" last-revision="$Date: 2007-03-06 16:51:55 -0500 (Tue, 06 Mar 2007) $">
  <namespace name="boost">
    <namespace name="signals2">
      <namespace name="keywords">
        <class name="signature_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="Signature"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>Signature</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(signature_type)</code>
            </para>
          </description>
        </class>
        <class name="combiner_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="Combiner"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>Combiner</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(combiner_type)</code>
            </para>
          </description>
        </class>
        <class name="group_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="Group"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>Group</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(group_type)</code>
            </para>
          </description>
        </class>
        <class name="group_compare_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="GroupCompare"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>GroupCompare</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(group_compare_type)</code>
            </para>
          </description>
        </class>
        <class name="slot_function_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="SlotFunction"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>SlotFunction</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(slot_function_type)</code>
            </para>
          </description>
        </class>
        <class name="extended_slot_function_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="ExtendedSlotFunction"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>ExtendedSlotFunction</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(extended_slot_function_type)</code>
            </para>
          </description>
        </class>
        <class name="mutex_type">
          <inherit access="public"><emphasis>unspecified-type</emphasis></inherit>
          <template>
            <template-type-parameter name="Mutex"/>
          </template>
          <purpose>A template keyword for <classname>signal_type</classname>.</purpose>
          <description>
            <para>
              This class is a template keyword which may be used to pass the wrapped <code>Mutex</code>
              template type to the <classname>signal_type</classname> metafunction as a named parameter.
            </para>
            <para>
              The code for this class is generated by a calling a macro from the Boost.Parameter library:
              <code>BOOST_PARAMETER_TEMPLATE_KEYWORD(mutex_type)</code>
            </para>
          </description>
        </class>
      </namespace>
      <class name="signal_type">
        <template>
          <template-type-parameter name="A0"/>
          <template-type-parameter name="A1">
            <default>boost::parameter::void_</default>
          </template-type-parameter>
          <template-type-parameter name="A2">
            <default>boost::parameter::void_</default>
          </template-type-parameter>
          <template-type-parameter name="A3">
            <default>boost::parameter::void_</default>
          </template-type-parameter>
          <template-type-parameter name="A4">
            <default>boost::parameter::void_</default>
          </template-type-parameter>
          <template-type-parameter name="A5">
            <default>boost::parameter::void_</default>
          </template-type-parameter>
          <template-type-parameter name="A6">
            <default>boost::parameter::void_</default>
          </template-type-parameter>
        </template>
        <purpose>Specify a the template type parameters of a <classname>boost::signals2::signal</classname> using named parameters.</purpose>
        <description>
          <para>The <code>signal_type</code> metafunction employs the Boost.Parameter library to
            allow users to specify the template type parameters of a <classname>signals2::signal</classname>
            using named parameters.  The resulting signal type is provided through the
            <code>signal_type::type</code> typedef.  Named template type parameters
            can enhance readability of code, and provide convenience for specifying classes
            which have a large number of template parameters.
          </para>
          <para>The template type parameters may be passed positionally, similarly to passing them
            to the <classname>signals2::signal</classname> class directly.  Or, they may be passed as named template parameters
            by wrapping them in one of the template keyword classes provided in the
            <code>boost::signals2::keywords</code> namespace.  The supported template keywords are:
            <classname>keywords::signature_type</classname>, <classname>keywords::combiner_type</classname>,
            <classname>keywords::group_type</classname>, <classname>keywords::group_compare_type</classname>,
            <classname>keywords::slot_function_type</classname>, <classname>keywords::extended_slot_function_type</classname>,
            and <classname>keywords::mutex_type</classname>.
          </para>
          <para>The default types for unspecified template type parameters are the same as those for the
            <classname>signal</classname> class.
          </para>
          <para>
            Named template type parameters are especially convenient when you only wish to change a
            few of a signal's template type parameters from their defaults, and the parameters
            you wish to change are near the end of the signal's template parameter list.
            For example, if you only wish to change the <code>Mutex</code> template type
            parameter of a signal, you might write:
          </para>
<programlisting>namespace bs2 = boost::signals2;
using bs2::keywords;
bs2::signal_type&lt;void (), mutex_type&lt;bs2::dummy_mutex&gt; &gt;::type sig;
</programlisting>
          <para>For comparison, to specify the same type using the signal class directly looks like:</para>
<programlisting>namespace bs2 = boost::signals2;
bs2::signal
  &lt;
    void (),
    bs2::optional_last_value&lt;void&gt;,
    int,
    std::less&lt;int&gt;,
    boost::function&lt;void ()&gt;,
    boost::function&lt;void (const connection &amp;)&gt;,
    bs2::dummy_mutex
  &gt; sig;
</programlisting>
        </description>
        <typedef name="signature_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="combiner_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="group_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="group_compare_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="slot_function_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="extended_slot_function_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="mutex_type">
          <type><emphasis>implementation-detail</emphasis></type>
        </typedef>
        <typedef name="type">
          <type>typename signal&lt;signature_type, combiner_type, ..., mutex_type&gt;</type>
        </typedef>
      </class>
    </namespace>
  </namespace>
</header>
