问题标签 [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.
c++ - 如何让 apply-visitor 不丢弃 const 限定符?
可以用里面写const
函数吗?apply_visitor
例如,此代码编译没有错误:
除非您将 const 添加到 getLength():
在这种情况下,会出现一个带有大量描述(2 页)的错误,抱怨初始化第一个参数的问题。
所以,问题是:如何在 const 函数中使用 apply_visitor?
c++ - Boost变体apply_visitor编译错误
boost::variant 和 boost::apply_visitor 的这个简单示例代码:
产生以下编译错误:
在使用 Boost 版本 1.55.0 的 Mac OSX Mavericks 上。
对于我的生活,我无法弄清楚这个问题。我试过实际上有一个返回类型(即使打印访问者不需要一个),但我最终得到了同样的错误。
任何见解将不胜感激。
c++ - C++ boost::variant 通用转换器
在过去的三天里,我一直在尝试找出如何实现一种从 boost::variant<...> 中获取价值的通用方法,但这非常困难。
这是我能想出的解决方案,它根本不是通用的:
如果有人可以指导我找到更好的解决方案,我将不胜感激。
或者也许有人可以向我解释这背后的理由:
如果我声明:
然后是:
为什么当我尝试将 ConverterToInt 应用于 MyVariant 时:
我得到一个编译器错误,试图找到一个带有 std::string 的 operator()?
在我看来,apply_visitor 正在尝试为 MyVariant 可以采用的每种类型调用 operator() 。是这样吗?如果是,为什么?我怎样才能避免这种行为?
干杯!
c++ - CGAL::交叉点错误
我正在使用 CGAL 计算 3d 三角形之间的交点。我需要验证交叉点是否返回点、线或三角形。
路口访客:
这给了我两个错误:
和
有人知道如何解决这些问题吗?
boost-variant - 如何从 boost::apply_visitor 返回模板值?
999
以下代码正确地将值和“ ”吐出test
到控制台,但我该如何返回这些值呢?像注释行之类的东西是我的最终目标。返回我可以分配给自动变量的值(因为我不知道我将要处理的类型)。我打算使用boost::lexical_cast
将此值转换为 astd::string
以将其插入到数据库中的字段中。
我尝试了其他示例中访问者的各种变体,但均未成功,包括DataMap
从基类派生,以便我可以将变量存储为成员。我的尝试最终没有成功。
任何建议表示赞赏。谢谢。
编辑:作为更新,以下代码让访问者正确返回std::string
. 我猜没有办法让一个访问者返回多种值类型(即,string
如果是 a 则string
返回值,如果是 a 则返回int
值int
等)?
c++ - 如何修改 boost::apply_visitor 以返回值?
我正在尝试使用 boost::variant 和 boost::apply_visitor。这已经有效,除非我尝试让 Vistor 的函数返回一个(布尔)值。我看到了很多关于这样做的例子,但我无法创建一个工作样本。这是我没有返回值的代码:
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 。
c++ - 如何将 boost::Makevariantover 转换为向量
我有一个 boost::makevariantover。如何将其转换为 vector 。使用 boost::apply_visitor 任何示例都会有所帮助
在哪里
c++ - 避免 boost::variant 访问者中的冗余代码
我面临以下问题:我有一些访问者访问 boost::variant,它们对特定类型都做同样的事情,这里是 foo,所以方法
在每个访问者中都是一样的。由于我不想在所有访问者中编写此冗余方法,因此我试图避免为所有访问者添加一个实现此方法的通用基类。问题方法递归调用访问者本身,如下所示:
并且由于与成员匹配的所有其他方法都没有在基类中实现,因此我得到一个编译器错误。现在我的问题是,我怎样才能摆脱我的冗余代码?
以下是有关问题外观的示例:
c++ - apply_visitor 不改变对象
我继承boost::static_visitor<>
并定义了一个类,如下所示:
这个类应该改变一些对象的 x 和 y 位置,Point、Line 和 Circle。
当我执行以下代码时:
p
保持为 1, 2 和l
. 为什么我的对象在“apply_visitor”之后没有改变?