⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 variant_reference_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
//-----------------------------------------------------------------------------// boost-libs variant/test/variant_reference_test.cpp source file// See http://www.boost.org for updates, documentation, and revision history.//-----------------------------------------------------------------------------//// Copyright (c) 2003// Eric Friedman, Itay Maman//// 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)#include "boost/variant.hpp"#include "boost/test/minimal.hpp"#include "boost/mpl/bool.hpp"#include "boost/type_traits/add_reference.hpp"#include "boost/type_traits/is_pointer.hpp"/////// support types and functionsstruct base_t { };struct derived_t : base_t { };template <typename Base, typename Derived>bool check_base_derived(Base* b, Derived* d, long){    return b == d;}template <typename Base, typename Derived>bool check_base_derived(Base& b, Derived& d, int){    return &b == &d;}template <typename T>    typename boost::add_reference<T>::typewknd_get(boost::variant<T&>& var, long){    return boost::get<T>(var);}template <typename T>    typename boost::add_reference<T>::typewknd_get(boost::variant<T>& var, int){    return boost::get<T>(var);}/////// test functionstemplate <typename T>void test_reference_content(T& t, const T& value1, const T& value2){    BOOST_CHECK( !(value1 == value2) );    /////    boost::variant< T& > var(t);    BOOST_CHECK(( boost::get<T>(&var) == &t ));    t = value1;    BOOST_CHECK(( boost::get<T>(var) == value1 ));    /////    boost::variant< T > var2(var);    BOOST_CHECK(( boost::get<T>(var2) == value1 ));    t = value2;    BOOST_CHECK(( boost::get<T>(var2) == value1 ));}template <typename Base, typename Derived>void base_derived_test(Derived d){    typedef typename boost::is_pointer<Base>::type is_ptr;    Base b(d);    BOOST_CHECK((check_base_derived(          b        , d        , 1L        )));    boost::variant<Base> base_var(d);    BOOST_CHECK((check_base_derived(          wknd_get(base_var, 1L)        , d        , 1L        )));    boost::variant<Derived> derived_var(d);    boost::variant<Base> base_from_derived_var(derived_var);    BOOST_CHECK((check_base_derived(          wknd_get(base_from_derived_var, 1L)        , wknd_get(derived_var, 1L)        , 1L        )));}int test_main(int , char* []){    int i = 0;    test_reference_content(i, 1, 2);    /////    derived_t d;    base_derived_test< int&,int >(i);    base_derived_test< base_t*,derived_t* >(&d);    base_derived_test< base_t&,derived_t& >(d);    return boost::exit_success;}

⌨️ 快捷键说明

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