问题标签 [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.
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 [... ]
任何人都可以帮忙吗?
编辑
sorting - 对 Range-v3 压缩容器进行排序 - 我可以解压缩吗?
是否可以使用 C++ Range-v3 库解压缩以前压缩的向量?我希望它的行为类似于 Haskell 的unzip函数或 Python 的zip(*list)。
例如,当按另一个向量的值对向量进行排序时,这会很方便:
c++ - boost::range 库的自定义范围
我正在使用 boost::range 库编写过滤器和映射算法:
现在我可以像这样使用它们:
我也想这样写代码:
不幸的是,我的 Converter 类没有使用 boost::range 算法,所以这个例子不能编译。我正在寻找一种适当的方法来改变它。
更新
我关注了@sehe 链接,结果发现我所要做的就是将这四行添加到 Converter 类中:
c++ - 将 Boost 适配器与 std::bind 表达式一起使用
我有以下代码:
当我尝试编译它时,clang 会给出以下错误消息(此处的完整输出):
似乎虽然绑定对象有一个复制构造函数,但它的复制赋值运算符被删除了。如果我尝试使用 lambda 而不是bind
.
这是 C++11 标准、libstdc++ 实现还是 Boost 适配器实现中的错误?
最好的解决方法是什么?我可以把它包装成一个
std::function
. 似乎boost::bind
也有效。哪个更有效,还是真的很重要?
c++11 - C ++ 11中的枚举器等价物?
在 C# 中,您可以非常简单地定义自定义枚举,例如:
(这可以使用 LINQ 和更好的封装来简化,但这不是问题的重点。)
在 C++11 中,您可以执行类似的枚举,但 AFAIK 它需要访问者模式:
有没有办法做一些更像第一种的方法,函数返回一个可以在外部迭代而不是在内部调用访问者的范围?
(我的意思不是构造 astd::vector<Foo>
并返回它——它应该是一个就地枚举。)
我知道 Boost.Range 库,我怀疑它会参与解决方案,但我对它并不是特别熟悉。
我也知道可以定义自定义迭代器来做这种事情(我也怀疑可能会涉及到答案),但我正在寻找易于编写的东西,理想情况下不会比显示的示例更复杂在这里,并且是可组合的(比如 with _SomeOtherCollection
)。
我更喜欢不需要调用者使用 lambdas 或其他仿函数的东西(因为这只会让它再次成为访问者),尽管我不介意在需要时在内部使用 lambdas(但仍然希望在那里避免它们)。
c++ - 这是 Visual Studio 2013 更新 4 C++ 优化器错误还是我的代码错误?
自从我更新到 boost 1.58 和 VS2013 以来,我一直在我们的软件中看到崩溃。只有当编译器优化开启时,我们才会看到崩溃。使用 boost 1.55 没有崩溃。我已经设法隔离了我所看到的问题boost::any_range
以及我们如何使用它。
请参见下面的示例代码:
下面是程序输出。DEBUG 版本的输出是我所期望的,但优化的 RELEASE 版本目前对我来说是一个谜......
也许我的代码是错误的,或者它真的是优化器中的一个错误?任何提示将非常感谢!
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>
有任何想法吗?
c++11 - 基于范围的算法能否完全独立于(但针对任何)容器类型进行了优化?
我想知道boost::range或range_v3是否会以类似于std::begin协调 STL 容器和类 C 数组的方式协调自由函数和成员函数(我的意思是在编码通用性方面)?
更具体地说,在自动调用std::list::sort给出的最佳实现的列表上调用std::sort对我来说会很方便。
最后,成员函数是否只能被视为其通用对应项的接口(std::list::sort从未在客户端代码中调用)?
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
迭代器。在这种情况下c0
是false
(预期的)和c1
是true
(不是预期的)。那么使用multi_pass
迭代器的正确方法是什么?
2.) 是的,我可以为每种类型的输入迭代器编译一个新的语法实例。我的想法是对用户隐藏实现细节(= boost::spirit
)并给他一个通用接口。因此,我想避免使用模板功能。
3.) 是的,我忘了公开属性。这只是一个快速而肮脏的例子。感谢您的提示。
c++ - 对 boost::range::transformed range 适配器进行分区
我正在尝试对boost::range::transformed
适配器进行分区:
编译器抱怨p1
它p2
找不到__partition
接受boost::iterators__transform_iterator
. 完整的错误信息是
我很迷茫,没有看到解决方案。任何帮助将不胜感激。