当前位置: 首页>>代码示例>>C++>>正文


C++ boost::apply_visitor方法代码示例

本文整理汇总了C++中boost::apply_visitor方法的典型用法代码示例。如果您正苦于以下问题:C++ boost::apply_visitor方法的具体用法?C++ boost::apply_visitor怎么用?C++ boost::apply_visitor使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在boost的用法示例。


在下文中一共展示了boost::apply_visitor方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: run

void run()
{
   using std::string;
   using boost::variant;
   using boost::apply_visitor;

   typedef variant<int, float, unsigned short, unsigned char> t_var1;
   typedef variant<int, t_var1, unsigned short, unsigned char> t_var2;
   typedef variant<string, int, t_var2> t_var3;

   t_var1 v1;
   t_var2 v2;
   t_var2 v2_second;
   t_var3 v3;

   const char c0 = 'x';
   v1 = c0;

   //v2 and v3 are holding (aka: containing) a variant
   v2 = v1;
   v3 = v2;

   verify(v1, spec<int>());
   verify(v2, spec<t_var1>());
   verify(v3, spec<t_var2>());


   //
   // assignment from const char (Converted to int)
   //
   v2 = c0;
   v3 = c0;

   verify(v2, spec<int>());
   verify(v3, spec<int>());


   BOOST_CHECK(apply_visitor(sum_int(), v2) == c0);
   BOOST_CHECK(apply_visitor(sum_int(), v3) == c0);

   sum_int adder;
   apply_visitor(adder, v2);
   apply_visitor(adder, v3);

   BOOST_CHECK(adder.result() == 2*c0);

   //
   // A variant holding a variant
   //
   typedef variant<unsigned char, float> t_var4;
   typedef variant<string, t_var4> t_var5;

   t_var4 v4;
   t_var5 v5;

   v5 = 22.5f;
   verify(v5, spec<t_var4>(), "[V] [V] 22.5");
}
开发者ID:cdaffara,项目名称:symbiandump-os2,代码行数:58,代码来源:test5.cpp

示例2: operator

 void operator()(const list& lst) const
 {
   check(lst.size() >= 0, "syntax error in 'define'.");
   value sym_v = lst.head();
   symbol sym = apply_visitor(function_name_visitor(), sym_v);
   check(!env_p->find_local(sym), "attempting to redefine symbol '" + sym + "'.");
   value params_v = lst.tail();
   vector< symbol > params = apply_visitor(lambda_params_visitor(), params_v);
   env_p->set(sym, make_shared< lambda >(params, expr[2], env_p));
 }
开发者ID:gale320,项目名称:lime,代码行数:10,代码来源:eval.cpp

示例3: repl

 void repl(shared_ptr< environment > env_p)
 {
   cout << prompt;
   string line;
   while (getline(cin, line)) {
     string code = line;
     stack< int > open_parens;
     while (!paren_match(code) || !quot_match(code)) {
       int ind = indent(line, open_parens);
       cout << string(ind + prompt.length(), ' ');
       if (!getline(cin, line)) {
         cout << bye;
         return;
       }
       if (quot_match(code))
         code.push_back(' ');
       code += line;
     }
     vector< string > parts = split(code);
     for (auto it = begin(parts); it + 1 < end(parts); ++it)
       eval(parse(*it), env_p);
     if (!parts.empty()) {
       value retval = eval(parse(parts.back()), env_p);
       apply_visitor(return_value_visitor(), retval);
     }
     cout << prompt;
   }
   cout << bye;
 }
开发者ID:gale320,项目名称:lime,代码行数:29,代码来源:interpreter.cpp

示例4: write

void IWORKPath::write(librevenge::RVNGPropertyListVector &vec, double deltaX, double deltaY) const
{
  for (Path_t::const_iterator it = m_impl->m_path.begin(); it != m_impl->m_path.end(); ++it)
  {
    for (const auto &cIt : *it)
      apply_visitor(Writer(vec, deltaX, deltaY), cIt);
  }
}
开发者ID:LibreOffice,项目名称:libetonyek,代码行数:8,代码来源:IWORKPath.cpp

示例5:

void IWORKPath::operator*=(const glm::dmat3 &tr)
{
  for (auto &it : m_impl->m_path)
  {
    for (auto &cIt : it)
      apply_visitor(Transformer(tr), cIt);
  }
}
开发者ID:LibreOffice,项目名称:libetonyek,代码行数:8,代码来源:IWORKPath.cpp

示例6: apply_visitor

 vector< symbol > operator()(const list& lst) const
 {
   vector< symbol > params(lst.size());
   transform(begin(lst), end(lst), begin(params), [](value v) {
       return apply_visitor(parameter_visitor(), v);
     });
   return params;
 }
开发者ID:gale320,项目名称:lime,代码行数:8,代码来源:eval.cpp

示例7: operator

void LabelOperandResolver::operator()(Line* line)
{  
  //this is to check if we had a blank line
  if(line->contents)
  {
    auto tmp = ProcLineContents(_labelTable, _errorReporting);
    apply_visitor(tmp, line->contents.get());
  }
}
开发者ID:hippiehunter,项目名称:MrFusion,代码行数:9,代码来源:LabelOperandResolver.cpp

示例8:

const std::string IWORKPath::str() const
{
  ostringstream sink;

  Path_t::const_iterator it = m_impl->m_path.begin();
  const Path_t::const_iterator end = m_impl->m_path.end();
  if (it != end)
  {
    apply_visitor(SVGPrinter(sink), *it);
    for (++it; it != end; ++it)
    {
      sink << ' ';
      apply_visitor(SVGPrinter(sink), *it);
    }
    if (m_impl->m_closed)
      sink << " Z";
  }

  return sink.str();
}
开发者ID:anuragkanungo,项目名称:libetonyek,代码行数:20,代码来源:IWORKPath.cpp

示例9: write

void IWORKPath::write(librevenge::RVNGPropertyListVector &vec) const
{
  for (Path_t::const_iterator it = m_impl->m_path.begin(); it != m_impl->m_path.end(); ++it)
    apply_visitor(Writer(vec), *it);
  if (m_impl->m_closed)
  {
    librevenge::RVNGPropertyList element;
    element.insert("librevenge:path-action", "Z");
    vec.append(element);
  }
}
开发者ID:anuragkanungo,项目名称:libetonyek,代码行数:11,代码来源:IWORKPath.cpp

示例10: computeBoundingBox

void IWORKPath::computeBoundingBox(double &minX, double &minY, double &maxX, double &maxY, double factor) const
{
  ComputeBoundingBox bdCompute;
  for (auto const &it : m_impl->m_path)
  {
    for (auto const &cIt : it)
      apply_visitor(bdCompute, cIt);
  }
  minX=factor*bdCompute.m_boundX[0];
  maxX=factor*bdCompute.m_boundX[1];
  minY=factor*bdCompute.m_boundY[0];
  maxY=factor*bdCompute.m_boundY[1];
}
开发者ID:LibreOffice,项目名称:libetonyek,代码行数:13,代码来源:IWORKPath.cpp

示例11: approxEqual

bool approxEqual(const IWORKPath &left, const IWORKPath &right, const double eps)
{
  if ((left.m_impl->m_closed != right.m_impl->m_closed)
      || (left.m_impl->m_path.size() != right.m_impl->m_path.size()))
    return false;
  for (Path_t::const_iterator lit = left.m_impl->m_path.begin(), rit = right.m_impl->m_path.begin();
       lit != left.m_impl->m_path.end();
       ++lit, ++rit)
  {
    if (!apply_visitor(Comparator(eps), *lit, *rit))
      return false;
  }
  return true;
}
开发者ID:anuragkanungo,项目名称:libetonyek,代码行数:14,代码来源:IWORKPath.cpp

示例12: toJson

string Message::toJson()
{      
    using boost::apply_visitor;
    
    Json::Value obj;
    obj["method"] = Json::Value ( name_ );

    Json::Value args;

    for ( const std::pair<argument::Name, argument::Value> & arg : argMap_ ) {
        apply_visitor ( ToJson ( args[arg.first] ), arg.second );
    }

    obj["args"] = args;

    Json::FastWriter writer;
    return writer.write ( obj );
}
开发者ID:imclab,项目名称:tscrypto,代码行数:18,代码来源:Message.cpp

示例13: run

void run()
{

   using boost::apply_visitor;
   using boost::variant;
   using std::string;
   using std::vector;
   using std::cout;
   using std::endl;

//test the general stuff

   typedef boost::polymorphic_visitor<double, boost::arg_tuple<int, double>, boost::arg_tuple<double, int>, boost::arg_tuple<int, int>, boost::arg_tuple<double, double>> poly_vis;

   struct vis : poly_vis
   {
	   virtual double operator()(int x, int y) 		 override { return x+y;}
	   virtual double operator()(double x, double y) override { return x*y;}
	   virtual double operator()(int x, double y) 	 override { return x-y;}
	   virtual double operator()(double x, int y) 	 override { return x/y;}
   };

   vis x;

   poly_vis &v = x;
   BOOST_CHECK(v(40, 2) == 42.);

   BOOST_CHECK(v(1.5,2.) == 3.);
   BOOST_CHECK(v(50, 8.0) == 42.);
   BOOST_CHECK(v(100., 25) == 4);

   //i maybe need some more tests here...

   variant<int, double> v1{2.5}, v2{4.};

   BOOST_CHECK(apply_visitor(v, v1, v2) == 10.);
}
开发者ID:klemens-morgenstern,项目名称:visitor,代码行数:37,代码来源:poly_test2.cpp

示例14: eval

 value eval(value expr, shared_ptr< environment > env_p)
 {
   return apply_visitor(eval_visitor(env_p), expr);
 }
开发者ID:gale320,项目名称:lime,代码行数:4,代码来源:eval.cpp

示例15: run

void run()
{

   using boost::apply_visitor;
   using boost::variant;
   using std::string;
   using std::vector;
   using std::cout;
   using std::endl;

   typedef variant< char*, string, short > t_var0;
   typedef variant< int, string, double > t_var1;
   typedef variant< short, const char* > t_var2;
   typedef variant< string, char > t_var3;   
   typedef variant< unsigned short, const char* > t_var4;
   typedef variant< unsigned short, const char*, t_var2 > t_var5;
   typedef variant< unsigned short, const char*, t_var5 > t_var6;
   typedef variant< class_a, const void* > t_var7;
   typedef variant< t_var6, int > t_var8;
   typedef variant< t_var8, unsigned short > t_var9;
   typedef variant< char, unsigned char > t_var10;
   typedef variant< short, int, vector<int>, long> t_var11;

   t_var1 v1;
   t_var0 v0;
   t_var2 v2;
   t_var3 v3;
   t_var4 v4;
   t_var5 v5;
   t_var6 v6;
   t_var7 v7;
   t_var8 v8;
   t_var9 v9;
   t_var10 v10;
   t_var11 v11;


   //
   // Check assignment rules 
   //

   v2 = 4;
   v4 = v2;
   verify(v4, spec<unsigned short>());

   v2 = "abc";
   v4 = v2;
   verify(v4, spec<const char*>(), "[V] abc");

   v5 = "def";
   verify(v5, spec<const char*>(), "[V] def");

   v5 = v2;
   verify(v5, spec<t_var2>(), "[V] [V] abc");

   v6 = 58;
   verify(v6, spec<unsigned short>(), "[V] 58");

   v6 = v5;
   verify(v6, spec<t_var5>(), "[V] [V] [V] abc");

   v8 = v2;
   verify(v8, spec<t_var6>(), "[V] [V] abc");

   v8 = v6;
   verify(v8, spec<t_var6>(), "[V] [V] [V] [V] abc");

   v7 = v2;
   verify(v7, spec<const void*>());

   v7 = 199;
   verify(v7, spec<class_a>(), "[V] class_a(199)");

   v2 = 200;
   v7 = v2;
   verify(v7, spec<class_a>(), "[V] class_a(200)");



   //
   // Check sizes of held values
   //
   total_sizeof ts;

   v1 = 5.9;
   apply_visitor(ts, v1);

   v1 = 'B';
   apply_visitor(ts, v1);

   v1 = 3.4f;
   apply_visitor(ts, v1);

   BOOST_CHECK(ts.result() == sizeof(int) + sizeof(double)*2);

   v11 = 5;
   string res_s = apply_visitor(int_printer(), v11);
   BOOST_CHECK(res_s == "5");

   //
//.........这里部分代码省略.........
开发者ID:AndroidAppList,项目名称:Android-Supertux,代码行数:101,代码来源:test1.cpp


注:本文中的boost::apply_visitor方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。