📄 variant_visit_test.cpp
字号:
//-----------------------------------------------------------------------------// boost-libs variant/test/variant_visit_test.cpp source file// See http://www.boost.org for updates, documentation, and revision history.//-----------------------------------------------------------------------------//// Copyright (c) 2003// Eric Friedman//// 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/variant.hpp"#include "boost/variant/apply_visitor.hpp"#include "boost/variant/static_visitor.hpp"#include "boost/test/minimal.hpp"#include "boost/mpl/bool.hpp"#include "boost/mpl/and.hpp"#include "boost/type_traits/is_same.hpp"struct udt1{};struct udt2{};template <typename T>class unary_check_content_type : public boost::static_visitor<bool>{public: // not recommended design, but simplifies workarounds: template <typename U> bool operator()(U&) const { return ::boost::is_same<T,U>::value; }};template <typename T1, typename T2>class binary_check_content_type : public boost::static_visitor<bool>{public: // not recommended design, but simplifies workarounds: template <typename U1, typename U2> bool operator()(U1&, U2&) const { return ::boost::mpl::and_< boost::is_same<T1,U1> , boost::is_same<T2,U2> >::value; }};template <typename Checker, typename Variant>inline void unary_test(Variant& var, Checker* = 0){ Checker checker; const Checker& const_checker = checker; // standard tests BOOST_CHECK( boost::apply_visitor(checker, var) ); BOOST_CHECK( boost::apply_visitor(const_checker, var) ); BOOST_CHECK( boost::apply_visitor(Checker(), var) ); // delayed tests BOOST_CHECK( boost::apply_visitor(checker)(var) ); BOOST_CHECK( boost::apply_visitor(const_checker)(var) );}template <typename Checker, typename Variant1, typename Variant2>inline void binary_test(Variant1& var1, Variant2& var2, Checker* = 0){ Checker checker; const Checker& const_checker = checker; // standard tests BOOST_CHECK( boost::apply_visitor(checker, var1, var2) ); BOOST_CHECK( boost::apply_visitor(const_checker, var1, var2) ); BOOST_CHECK( boost::apply_visitor(Checker(), var1, var2) ); // delayed tests BOOST_CHECK( boost::apply_visitor(checker)(var1, var2) ); BOOST_CHECK( boost::apply_visitor(const_checker)(var1, var2) );}int test_main(int , char* []){ typedef boost::variant<udt1,udt2> var_t; udt1 u1; var_t var1(u1); udt2 u2; var_t var2(u2); const var_t& cvar1 = var1; const var_t& cvar2 = var2; // // unary tests // typedef unary_check_content_type<udt1> check1_t; typedef unary_check_content_type<const udt1> check1_const_t; typedef unary_check_content_type<udt2> check2_t; typedef unary_check_content_type<const udt2> check2_const_t; unary_test< check1_t >(var1); unary_test< check1_const_t >(cvar1); unary_test< check2_t >(var2); unary_test< check2_const_t >(cvar2); // // binary tests // typedef binary_check_content_type<udt1,udt2> check12_t; typedef binary_check_content_type<const udt1, const udt2> check12_const_t; typedef binary_check_content_type<udt2,udt1> check21_t; typedef binary_check_content_type<const udt2, const udt1> check21_const_t; binary_test< check12_t >(var1,var2); binary_test< check12_const_t >(cvar1,cvar2); binary_test< check21_t >(var2,var1); binary_test< check21_const_t >(cvar2,cvar1); return boost::exit_success;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -