本文整理汇总了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");
}
示例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));
}
示例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;
}
示例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);
}
}
示例5:
void IWORKPath::operator*=(const glm::dmat3 &tr)
{
for (auto &it : m_impl->m_path)
{
for (auto &cIt : it)
apply_visitor(Transformer(tr), cIt);
}
}
示例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;
}
示例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());
}
}
示例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();
}
示例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);
}
}
示例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];
}
示例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;
}
示例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 );
}
示例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.);
}
示例14: eval
value eval(value expr, shared_ptr< environment > env_p)
{
return apply_visitor(eval_visitor(env_p), expr);
}
示例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");
//
//.........这里部分代码省略.........