问题标签 [boost-range]

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 回答
432 浏览

boost - 文件系统路径的提升范围副本的编译问题

以下代码在使用 1.46 编译时无法使用 1.58 编译。我想这是一个类型转换问题,但我无法正确处理。

我的代码

错误信息(VS2010)

错误 1 ​​错误 C2664: 'boost::filesystem::recursive_directory_iterator::recursive_directory_iterator(const boost::filesystem::path &,boost::filesystem::symlink_option::enum_type)' : 无法从 'boost::iterators 转换参数 1 ::detail::postfix_increment_proxy' 到 'const boost::filesystem::path &' [...]\boost\1.58.0_32\include\boost-1_58\boost\range\concepts.hpp 201 1 [... ]

任何人都可以帮忙吗?

编辑

归档为https://svn.boost.org/trac/boost/ticket/11228

0 投票
1 回答
1964 浏览

sorting - 对 Range-v3 压缩容器进行排序 - 我可以解压缩吗?

是否可以使用 C++ Range-v3 库解压缩以前压缩的向量?我希望它的行为类似于 Haskell 的unzip函数或 Python 的zip(*list)

例如,当按另一个向量的值对向量进行排序时,这会很方便:

0 投票
1 回答
1612 浏览

c++ - boost::range 库的自定义范围

我正在使用 boost::range 库编写过滤器和映射算法:

现在我可以像这样使用它们:

我也想这样写代码:

不幸的是,我的 Converter 类没有使用 boost::range 算法,所以这个例子不能编译。我正在寻找一种适当的方法来改变它。

更新

我关注了@sehe 链接,结果发现我所要做的就是将这四行添加到 Converter 类中:

0 投票
1 回答
410 浏览

c++ - 将 Boost 适配器与 std::bind 表达式一起使用

我有以下代码:

当我尝试编译它时,clang 会给出以下错误消息(此处的完整输出):

似乎虽然绑定对象有一个复制构造函数,但它的复制赋值运算符被删除了。如果我尝试使用 lambda 而不是bind.

  1. 这是 C++11 标准、libstdc++ 实现还是 Boost 适配器实现中的错误?

  2. 最好的解决方法是什么?我可以把它包装成一个std::function. 似乎boost::bind也有效。哪个更有效,还是真的很重要?

0 投票
4 回答
122 浏览

c++11 - C ++ 11中的枚举器等价物?

在 C# 中,您可以非常简单地定义自定义枚举,例如:

(这可以使用 LINQ 和更好的封装来简化,但这不是问题的重点。)


在 C++11 中,您可以执行类似的枚举,但 AFAIK 它需要访问者模式:

有没有办法做一些更像第一种的方法,函数返回一个可以在外部迭代而不是在内部调用访问者的范围?

(我的意思不是构造 astd::vector<Foo>并返回它——它应该是一个就地枚举。)

我知道 Boost.Range 库,我怀疑它会参与解决方案,但我对它并不是特别熟悉。

我也知道可以定义自定义迭代器来做这种事情(我也怀疑可能会涉及到答案),但我正在寻找易于编写的东西,理想情况下不会比显示的示例更复杂在这里,并且是可组合的(比如 with _SomeOtherCollection)。

我更喜欢不需要调用者使用 lambdas 或其他仿函数的东西(因为这只会让它再次成为访问者),尽管我不介意在需要时在内部使用 lambdas(但仍然希望在那里避免它们)。

0 投票
1 回答
233 浏览

c++ - 这是 Visual Studio 2013 更新 4 C++ 优化器错误还是我的代码错误?

自从我更新到 boost 1.58 和 VS2013 以来,我一直在我们的软件中看到崩溃。只有当编译器优化开启时,我们才会看到崩溃。使用 boost 1.55 没有崩溃。我已经设法隔离了我所看到的问题boost::any_range以及我们如何使用它。

请参见下面的示例代码:

下面是程序输出。DEBUG 版本的输出是我所期望的,但优化的 RELEASE 版本目前对我来说是一个谜......

也许我的代码是错误的,或者它真的是优化器中的一个错误?任何提示将非常感谢!

0 投票
1 回答
91 浏览

c++ - 使用 boost::range 创建一个 unindent 算法

我正在为文本编辑器创建一个不缩进算法。我设法获得了要操作的范围,但是当我想做 Gtk::TextBuffer::erase 时,它​​失败了:

TextEditor.cpp:501:31: 错误: 从 'boost::range_detail::join_iterator >, Gtk::TextIter, unsigned int, unsigned int, boost::iterators::bidirectional_traversal_tag>, Gtk::TextIter, unsigned 没有可行的转换int, unsigned int, boost::iterators::bidirectional_traversal_tag>' to 'const iterator' (aka 'const Gtk::TextIter') buffer->erase(spaceRange.begin(), afterRangeLine.end()); ^~~~~~~~~~~~~~~~~~ /usr/include/gtkmm-3.0/gtkmm/textiter.h:145:7:注意:候选构造函数(隐式复制构造函数)不可行:没有从 'boost::range_detail::join_iterator >、Gtk::TextIter、unsigned int、unsigned int、boost::iterators::bidirectional_traversal_tag>、Gtk::TextIter、unsigned int、unsigned int、boost::iterators 的已知转换: :bidirectional_traversal_tag>

有任何想法吗?

0 投票
1 回答
159 浏览

c++11 - 基于范围的算法能否完全独立于(但针对任何)容器类型进行了优化?

我想知道boost::rangerange_v3是否会以类似于std::begin协调 STL 容器和类 C 数组的方式协调自由函数和成员函数(我的意思是在编码通用性方面)?

更具体地说,在自动调用std::list::sort给出的最佳实现的列表上调用std::sort对我来说会很方便。

最后,成员函数是否只能被视为其通用对应项的接口(std::list::sort从未在客户端代码中调用)?

0 投票
1 回答
123 浏览

c++ - 结合 boost::spirit 和 boost::any_range?

该函数boost::spirit::qi::parse()需要两个迭代器来定义输入范围。std::string如果我尝试从or解析,这很好用std::istream。现在我想为我的解析器实现一个更通用的接口。一种方法是用来boost::any_range定义输入。这是我编译但抛出异常的测试代码"string iterator not dereferencable"

第二个问题。我怎样才能结合boost::any_range在一起boost::spirit::classic::position_iterator来检测可能的错误位置?

更新

1.) 我同意默认构造的sEnd迭代器存在错误。因此我简化了我的例子,我想我误解了如何使用multi_pass迭代器。在这种情况下c0false(预期的)和c1true(不是预期的)。那么使用multi_pass迭代器的正确方法是什么?

2.) 是的,我可以为每种类型的输入迭代器编译一个新的语法实例。我的想法是对用户隐藏实现细节(= boost::spirit)并给他一个通用接口。因此,我想避免使用模板功能。

3.) 是的,我忘了公开属性。这只是一个快速而肮脏的例子。感谢您的提示。

0 投票
1 回答
547 浏览

c++ - 对 boost::range::transformed range 适配器进行分区

我正在尝试对boost::range::transformed适配器进行分区:

编译器抱怨p1p2找不到__partition接受boost::iterators__transform_iterator. 完整的错误信息是

我很迷茫,没有看到解决方案。任何帮助将不胜感激。