]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost.TypeErasure library |
2 | // | |
3 | // Copyright 2011 Steven Watanabe | |
4 | // | |
5 | // Distributed under the Boost Software License Version 1.0. (See | |
6 | // accompanying file LICENSE_1_0.txt or copy at | |
7 | // http://www.boost.org/LICENSE_1_0.txt) | |
8 | // | |
9 | // $Id$ | |
10 | ||
11 | #ifndef BOOST_TYPE_ERASURE_CONCEPT_INTERFACE_HPP_INCLUDED | |
12 | #define BOOST_TYPE_ERASURE_CONCEPT_INTERFACE_HPP_INCLUDED | |
13 | ||
14 | namespace boost { | |
15 | namespace type_erasure { | |
16 | ||
17 | /** | |
18 | * The @ref concept_interface class can be specialized to | |
19 | * add behavior to an @ref any. An @ref any inherits from | |
20 | * all the relevant specializations of @ref concept_interface. | |
21 | * | |
22 | * @ref concept_interface can be specialized for either | |
23 | * primitive or composite concepts. If a concept @c C1 | |
24 | * contains another concept @c C2, then the library guarantees | |
25 | * that the specialization of @ref concept_interface for | |
26 | * @c C2 is a base class of the specialization for @c C1. | |
27 | * This means that @c C1 can safely override members of @c C2. | |
28 | * | |
29 | * @ref concept_interface may only be specialized for user-defined | |
30 | * concepts. The library owns the specializations of its own | |
31 | * built in concepts. | |
32 | * | |
33 | * \tparam Concept The concept that we're specializing | |
34 | * @ref concept_interface for. One of its | |
35 | * placeholders should be @c ID. | |
36 | * \tparam Base The base of this class. Specializations of @ref | |
37 | * concept_interface must inherit publicly from this type. | |
38 | * \tparam ID The placeholder representing this type. | |
39 | * \tparam Enable A dummy parameter that can be used for SFINAE. | |
40 | * | |
41 | * The metafunctions @ref derived, @ref rebind_any, and @ref as_param | |
42 | * (which can be applied to @c Base) are useful for determining the | |
43 | * argument and return types of functions defined in @ref concept_interface. | |
44 | * | |
45 | * For dispatching the function use \call. | |
46 | */ | |
47 | template<class Concept, class Base, class ID, class Enable = void> | |
48 | struct concept_interface : Base {}; | |
49 | ||
50 | } | |
51 | } | |
52 | ||
53 | #endif |