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

📄 test8.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
//-----------------------------------------------------------------------------// boost-libs variant/test/test8.cpp header 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/test/minimal.hpp"#include "boost/variant.hpp"#include <iostream>#include <vector>#include <string>using namespace std;using namespace boost;typedef variant<float, std::string, int, std::vector<std::string> > t_var1;struct int_sum : static_visitor<>{   int_sum() : result_(0) { }   void operator()(int t)    {      result_ += t;   }   result_type operator()(float ) { }   result_type operator()(const std::string& ) { }   result_type operator()(const std::vector<std::string>& ) { }   int result_;}; template <typename T, typename Variant>T& check_pass(Variant& v, T value){    BOOST_CHECK(get<T>(&v));    try    {        T& r = get<T>(v);        BOOST_CHECK(r == value);        return r;    }    catch(boost::bad_get&)    {        throw; // must never reach    }}template <typename T, typename Variant>void check_fail(Variant& v){    BOOST_CHECK(!get<T>(&v));    try    {        T& r = get<T>(v);        BOOST_CHECK(false && &r); // should never reach    }    catch(boost::bad_get&)    {        // (do nothing here)    }}int test_main(int , char* []){   int_sum acc;   t_var1 v1 = 800;   // check get on non-const variant   {      int& r1 = check_pass<int>(v1, 800);      const int& cr1 = check_pass<const int>(v1, 800);      check_fail<float>(v1);      check_fail<const float>(v1);      check_fail<short>(v1);      check_fail<const short>(v1);      apply_visitor(acc, v1);      BOOST_CHECK(acc.result_ == 800);      r1 = 920; // NOTE: modifies content of v1      apply_visitor(acc, v1);      BOOST_CHECK(cr1 == 920);      BOOST_CHECK(acc.result_ == 800 + 920);   }   // check const correctness:   {      const t_var1& c = v1;      check_pass<const int>(c, 920);      //check_fail<int>(c);      check_fail<const float>(c);      //check_fail<float>(c);      check_fail<const short>(c);      //check_fail<short>(c);   }   return boost::exit_success;}

⌨️ 快捷键说明

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