bases.cpp

来自「boost库提供标准的C++ API 配合dev c++使用,功能更加强大」· C++ 代码 · 共 64 行

CPP
64
字号
// Copyright David Abrahams 2002. Permission to copy, use,
// modify, sell and distribute this software is granted provided this
// copyright notice appears in all copies. This software is provided
// "as is" without express or implied warranty, and with no claim as
// to its suitability for any purpose.
#include <boost/python/bases.hpp>
#include <boost/static_assert.hpp>
#include <boost/type_traits/same_traits.hpp>

struct A;
struct B;

template <class X, class Y, class Z>
struct choose_bases
    : boost::python::detail::select_bases<
    X
    , typename boost::python::detail::select_bases<
        Y
        , typename boost::python::detail::select_bases<Z>::type
    >::type>
{
    
};

int main()
{
    BOOST_STATIC_ASSERT((boost::python::detail::specifies_bases<
                         boost::python::bases<A,B> >::value));

    BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
                         boost::python::bases<A,B>& >::value));

    BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
                         void* >::value));

    BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
                         int >::value));

    BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
                         int[5] >::value));

    typedef boost::python::detail::select_bases<
        int
        , boost::python::detail::select_bases<char*>::type > collected1;

    BOOST_STATIC_ASSERT((boost::is_same<collected1::type,boost::python::bases<> >::value));
    BOOST_STATIC_ASSERT((boost::is_same<choose_bases<int,char*,long>::type,boost::python::bases<> >::value));
    
    typedef boost::python::detail::select_bases<
        int
        , boost::python::detail::select_bases<
                boost::python::bases<A,B>
                , boost::python::detail::select_bases<
                        A
            >::type
         >::type
     > collected2;

    BOOST_STATIC_ASSERT((boost::is_same<collected2::type,boost::python::bases<A,B> >::value));
    BOOST_STATIC_ASSERT((boost::is_same<choose_bases<int,boost::python::bases<A,B>,long>::type,boost::python::bases<A,B> >::value));
    
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?