问题标签 [apply-visitor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
203 浏览

c++ - 如何让 apply-visitor 不丢弃 const 限定符?

可以用里面写const函数吗?apply_visitor例如,此代码编译没有错误:

除非您将 const 添加到 getLength():

在这种情况下,会出现一个带有大量描述(2 页)的错误,抱怨初始化第一个参数的问题。

所以,问题是:如何在 const 函数中使用 apply_visitor?

0 投票
1 回答
1169 浏览

c++ - Boost变体apply_visitor编译错误

boost::variant 和 boost::apply_visitor 的这个简单示例代码:

产生以下编译错误:

在使用 Boost 版本 1.55.0 的 Mac OSX Mavericks 上。

对于我的生活,我无法弄清楚这个问题。我试过实际上有一个返回类型(即使打印访问者不需要一个),但我最终得到了同样的错误。

任何见解将不胜感激。

0 投票
2 回答
148 浏览

c++ - C++ boost::variant 通用转换器

在过去的三天里,我一直在尝试找出如何实现一种从 boost::variant<...> 中获取价值的通用方法,但这非常困难。

这是我能想出的解决方案,它根本不是通用的:

如果有人可以指导我找到更好的解决方案,我将不胜感激。

或者也许有人可以向我解释这背后的理由:

如果我声明:

然后是:

为什么当我尝试将 ConverterToInt 应用于 MyVariant 时:

我得到一个编译器错误,试图找到一个带有 std::string 的 operator()?

在我看来,apply_visitor 正在尝试为 MyVariant 可以采用的每种类型调用 operator() 。是这样吗?如果是,为什么?我怎样才能避免这种行为?

干杯!

0 投票
1 回答
683 浏览

c++ - CGAL::交叉点错误

我正在使用 CGAL 计算 3d 三角形之间的交点。我需要验证交叉点是否返回点、线或三角形。

路口访客:

这给了我两个错误:

有人知道如何解决这些问题吗?

0 投票
1 回答
1075 浏览

boost-variant - 如何从 boost::apply_visitor 返回模板值?

999以下代码正确地将值和“ ”吐出test到控制台,但我该如何返回这些值呢?像注释行之类的东西是我的最终目标。返回我可以分配给自动变量的值(因为我不知道我将要处理的类型)。我打算使用boost::lexical_cast将此值转换为 astd::string以将其插入到数据库中的字段中。

我尝试了其他示例中访问者的各种变体,但均未成功,包括DataMap从基类派生,以便我可以将变量存储为成员。我的尝试最终没有成功。

任何建议表示赞赏。谢谢。

编辑:作为更新,以下代码让访问者正确返回std::string. 我猜没有办法让一个访问者返回多种值类型(即,string如果是 a 则string返回值,如果是 a 则返回intint等)?

0 投票
1 回答
4624 浏览

c++ - 如何修改 boost::apply_visitor 以返回值?

我正在尝试使用 boost::variant 和 boost::apply_visitor。这已经有效,除非我尝试让 Vistor 的函数返回一个(布尔)值。我看到了很多关于这样做的例子,但我无法创建一个工作样本。这是我没有返回值的代码:

0 投票
0 回答
98 浏览

c++ - 使用 boost::apply_visitor 将变量像素缓冲区转换为向量

我正在尝试使用 boost 中的 apply_visitor 将 variablepixelbuffer.vbuffer() 转换为双值向量。

到目前为止,我一直使用这段代码:

但是我遇到了一些很长的错误,其中一些是

/usr/include/boost/variant/detail/apply_visitor_unary.hpp:60:43:
'typename Visitor::result_type boost::apply_visitor(Visitor&, Visitable&) [with Visitor = MinMaxVisitor; 可访问 = boost::variant >, boost::mpl::v_item >, boost::mpl::v_item

, boost::mpl::v_item >, boost::mpl::v_item >, boost::mpl::v_item >, boost::mpl::v_item , boost::mpl::v_item , boost::mpl:: v_item , boost::mpl::v_item

detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant:: void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail ::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_ , boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail ::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_ , boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail: :variant::void_, boost::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail ::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_ , boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail: :variant::void_, boost::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::变量::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost ::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '. boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::变量::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost ::detail::variant::void_>; typename Visitor::result_type = std::vector >]' read_subimage.C:82:85: 这里需要 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: 错误: 必须使用 '.' 或 '-> ' 来调用 '__f (...)' 中的指向成员函数,例如 '(... ->* __f) (...)'</p>

我该如何解决这个问题,我需要将像素缓冲区数据转换为 vector 。

0 投票
2 回答
108 浏览

c++ - 如何将 boost::Makevariantover 转换为向量

我有一个 boost::makevariantover。如何将其转换为 vector 。使用 boost::apply_visitor 任何示例都会有所帮助

在哪里

0 投票
1 回答
107 浏览

c++ - 避免 boost::variant 访问者中的冗余代码

我面临以下问题:我有一些访问者访问 boost::variant,它们对特定类型都做同样的事情,这里是 foo,所以方法

在每个访问者中都是一样的。由于我不想在所有访问者中编写此冗余方法,因此我试图避免为所有访问者添加一个实现此方法的通用基类。问题方法递归调用访问者本身,如下所示:

并且由于与成员匹配的所有其他方法都没有在基类中实现,因此我得到一个编译器错误。现在我的问题是,我怎样才能摆脱我的冗余代码?

以下是有关问题外观的示例:

0 投票
1 回答
85 浏览

c++ - apply_visitor 不改变对象

我继承boost::static_visitor<>并定义了一个类,如下所示:

这个类应该改变一些对象的 x 和 y 位置,Point、Line 和 Circle。

当我执行以下代码时:

p保持为 1, 2 和l. 为什么我的对象在“apply_visitor”之后没有改变?