Sophie

Sophie

distrib > Mageia > 6 > i586 > by-pkgid > 8bc6759a6f32712e5bc0cdfb80b23784 > files > 4346

boost-examples-1.60.0-6.mga6.noarch.rpm

// Copyright 2013-2015 Antony Polukhin

// Distributed under the Boost Software License, Version 1.0.
// (See the accompanying file LICENSE_1_0.txt
// or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)


//[type_index_my_type_index_worldwide_macro
/*`
    There is an easy way to force `boost::typeindex::type_id` to use your own type_index class.

    All we need to do is just define `BOOST_TYPE_INDEX_USER_TYPEINDEX` to the full path to header file
    of your type index class:
*/

// BOOST_TYPE_INDEX_USER_TYPEINDEX must be defined *BEFORE* first inclusion of <boost/type_index.hpp>
#define BOOST_TYPE_INDEX_USER_TYPEINDEX <boost/../libs/type_index/examples/user_defined_typeinfo.hpp>
#include <boost/type_index.hpp>
//] [/type_index_my_type_index_worldwide_macro]

#include <boost/core/lightweight_test.hpp>
#ifdef assert
#   undef assert
#endif
#define assert(X) BOOST_TEST(X)


using namespace my_namespace;

int main() {
//[type_index_my_type_index_usage
/*`
    Finally we can use the my_type_index class for getting type indexes:
*/

    my_type_index
        cl1 = my_type_index::type_id<my_class>(),
        st1 = my_type_index::type_id<my_struct>(),
        st2 = my_type_index::type_id<my_struct>(),
        vec = my_type_index::type_id<my_classes>()
    ;

    assert(cl1 != st1);
    assert(st2 == st1);
    assert(vec.pretty_name() == "my_classes");
    assert(cl1.pretty_name() == "my_class");

//] [/type_index_my_type_index_usage]

//[type_index_my_type_index_type_id_runtime_test
/*`
    Now the following example will compile and work.
*/
    my_struct str;
    my_class& reference = str;
    assert(my_type_index::type_id<my_struct>() == my_type_index::type_id_runtime(reference));
//][/type_index_my_type_index_type_id_runtime_test]

//[type_index_my_type_index_worldwide_usage
/*`
    That's it! Now all TypeIndex global methods and typedefs will be using your class:
*/
    boost::typeindex::type_index worldwide = boost::typeindex::type_id<my_classes>();
    assert(worldwide.pretty_name() == "my_classes");
    assert(worldwide == my_type_index::type_id<my_classes>());
//][/type_index_my_type_index_worldwide_usage]
}