std::string operator()(const std::vector<T>& vec) const { std::ostringstream ost; ost << "( "; typename std::vector<T>::const_iterator it = vec.begin(); for (; it != vec.end(); ++it) ost << boost::apply_visitor( vector_printer(), *it ); ost << ") "; return ost.str(); }
int test_main(int , char* []) { typedef boost::make_recursive_variant< int , std::vector<boost::recursive_variant_> >::type var_t; std::vector<var_t> vec; vec.push_back(3); vec.push_back(5); vec.push_back(vec); vec.push_back(7); var_t var(vec); std::string result( boost::apply_visitor( vector_printer(), var ) ); std::cout << "result: " << result << '\n'; BOOST_CHECK(result == "( 3 5 ( 3 5 ) 7 ) "); return boost::exit_success; }
void test_recursive_variant() { typedef boost::make_recursive_variant< int , std::vector<boost::recursive_variant_> >::type var1_t; std::vector<var1_t> vec1; vec1.push_back(3); vec1.push_back(5); vec1.push_back(vec1); vec1.push_back(7); var1_t var1(vec1); std::string result1( boost::apply_visitor( vector_printer(), var1 ) ); std::cout << "result1: " << result1 << '\n'; BOOST_CHECK(result1 == "( 3 5 ( 3 5 ) 7 ) "); typedef boost::make_recursive_variant< boost::variant<int, double> , std::vector<boost::recursive_variant_> >::type var2_t; std::vector<var2_t> vec2; vec2.push_back(boost::variant<int, double>(3)); vec2.push_back(boost::variant<int, double>(3.5)); vec2.push_back(vec2); vec2.push_back(boost::variant<int, double>(7)); var2_t var2(vec2); std::string result2( boost::apply_visitor( vector_printer(), var2 ) ); std::cout << "result2: " << result2 << '\n'; BOOST_CHECK(result2 == "( 3 3.5 ( 3 3.5 ) 7 ) "); typedef boost::make_recursive_variant< int , std::vector< boost::variant< double , std::vector<boost::recursive_variant_> > > >::type var3_t; typedef boost::variant<double, std::vector<var3_t> > var4_t; std::vector<var3_t> vec3; vec3.push_back(3); vec3.push_back(5); std::vector<var4_t> vec4; vec4.push_back(3.5); vec4.push_back(vec3); vec3.push_back(vec4); vec3.push_back(7); var4_t var4(vec3); std::string result3( boost::apply_visitor( vector_printer(), var4 ) ); std::cout << "result2: " << result3 << '\n'; BOOST_CHECK(result3 == "( 3 5 ( 3.5 ( 3 5 ) ) 7 ) "); typedef boost::make_recursive_variant< double, std::vector<var1_t> >::type var5_t; std::vector<var5_t> vec5; vec5.push_back(3.5); vec5.push_back(vec1); vec5.push_back(17.25); std::string result5( vector_printer()(vec5) ); std::cout << "result5: " << result5 << '\n'; BOOST_CHECK(result5 == "( 3.5 ( 3 5 ( 3 5 ) 7 ) 17.25 ) "); typedef boost::make_recursive_variant< int, std::map<int, boost::recursive_variant_> >::type var6_t; var6_t var6; }