草庐IT

boost-lambda

全部标签

c++ - 如何使用 Boost.Spirit.Qi 增量解析(并作用于)大文件?

我为自定义文本文件格式创建了一个Qi解析器。有数以万计的条目要处理,每个条目通常有1-10个子条目。我放了一个精简的解析器工作示例here.#include#include#include#include#include#include#include#include#include#include#include#include#includeusingstd::string;usingstd::vector;usingstd::cout;usingstd::endl;namespacemodel{namespaceqi=boost::spirit::qi;structspectru

c++ - 初始化期间的 lambda 捕获应该是一个错误

我正在尝试做的是在构造一个可能无效的对象时吃掉异常。它非常适合使用std::optional,但我不相信省略std::optional会改变我看到的错误:对象正在在初始化之前捕获并使用。我认为首先不应该捕获它,因为据我所知我们还没有达到序列点(lambda初始化算作序列点吗?)。此外,该错误是IMO容易捕获的人为错误(甚至确实会被捕获……视情况而定)。lambda如何(更重要的是,为什么)能够捕获和使用尚未初始化的foo?https://godbolt.org/g/IwcHrV#includeusingnamespacestd;voidfoo(){stringfoo=[&]()->st

c++ - boost 收集范围的适配器

我想编写一个boost适配器放在适配器链的末尾以创建一个集合,如下所示:sets=input|filtered(...)|transformed(...)|to_set;使用Method3.1我写了下面的代码,它似乎按预期工作:namespacedetail{structto_set_forwarder{};};templateinlineautooperator|(R&r,detail::to_set_forwarder){returnset(r.begin(),r.end());}templateinlineautooperator|(constR&r,detail::to_set

c++ - 使用 boost spirit 的递归 BNF 规则

我正在尝试使用boostspirit为以下BNF规则编写解析器(Boostv1.64)规则是:::=integer::="in"|"out"|"in_out"::="["[]"]"::="("(",")+")"::=||下面是我的尝试,使用boost::make_recursive_variant它似乎在字符串in上工作正常但它在in[2]上失败了。我的错误在哪里?什么是优雅的解决方案?namespaceAst{enumclassTypeName{IN,OUT,INOUT};usingNumericLiteral=int;usingTypeSpec=boost::make_recurs

c++ - 使用整数索引访问 boost::graph 中的特定边

这与我昨天关于使用整数索引访问顶点的问题有关。该线程在这里:Accessingspecificverticesinboost::graph那里的解决方案表明,使用vecS作为顶点类型,确实可以使用整数索引访问特定顶点。我想知道boost是否提供了类似的方法来使用整数索引有效地访问任意边缘。附件是描述前者(有效访问具有整数索引的顶点)和基于开发人员显式维护两个数组访问边的代码,from[]和to[],分别存储边的源和目标。代码创建了下图:#include#include#include#include#includeusingnamespaceboost;typedefadjacency

c++ - 如何在 C++ 中提供像 lambda 这样的可调用对象保护访问?

我有一个lambda,我需要将其转换为可调用对象,以便我可以专门化调用运算符。我的印象一直是带有void(auto)签名的lambda相当于一个大致如下的可调用结构:structcallable{Foo&capture;templatevoidoperator()(Targ){/*...*/}}但是,在成员函数中声明时,lambda可以访问私有(private)成员和protected成员。这是一个简化的例子:#includeusingnamespacestd;classA{protected:voida(){couta();}};voidB::call1(){//butthenhow

python - 链接 boost::python::numpy 时出现问题

我写了一个小例子来说明发生了什么。我的测试.cpp#include#includenamespacenp=boost::python::numpy;intmy_Foo(){Py_Initialize();np::initialize();std::coutpy_test.pyimportmy_testastt.my_Foo();我用命令编译所有:g++-shared-fPIC-omy_test.somy_test.cpp-lboost_python-lpython2.7-I/usr/include/python2.7我得到这个错误:ImportError:/home/my_test.s

c++ - 通过实用程序 fn 将捕获式 lambda 传递给 C 样式回调 - 错误

我想在实用函数的帮助下将捕获式lambda函数传递给C风格的回调:#include#include#includestructAWS_IoT_Client{};structIoT_Publish_Message_Params{intpayload[1024];};typedefenum{SHADOW_ACK_TIMEOUT,SHADOW_ACK_REJECTED,SHADOW_ACK_ACCEPTED}Shadow_Ack_Status_t;typedefenum{SHADOW_GET,SHADOW_UPDATE,SHADOW_DELETE}ShadowActions_t;typede

c++ - 通用 lambda、重载、std::is_invocable 和 SFINAE - GCC 和 Clang 之间的不同行为

问题我写了一段可以编译的复杂模板代码withGCC8.2.1,但不是withClang7.0(代码和错误链接)。我认为这可能是thisQ&A的暗示,但我看不到它。动机我正在编写一个类,我希望它可以用两个不同类型的可调用对象构造,但也可以省略其中一个,即:my_class(callable_1);my_class(callable_2);my_class(callable_1,callable_2);那应该没有问题。但是,为什么不允许callable_1和callable_2成为函数模板(或带有operator()模板的仿函数)。也就是说,我想要这个(或者至少最初想要):my_class

c++ - Visual Studio(或任何其他工具)能否将地址解释为调用堆栈的开始( boost 上下文)?

是否可以告诉VisualStudio(或任何其他主要操作系统上的任何其他工具)将地址解释为调用堆栈的开头?我想要实现的目标:我们有一个库,它使用boost的make_fcontext/jump_fcontext并将这些上下文存储到一个容器,以便暂停一些调用以供以后处理。我的问题是-是否有可能以某种方式调试这些挂起的调用是什么?我想,我可以告诉调试器/工具类似:“这是这个地址,虽然它并不明显,但它实际上指向一个调用堆栈,‘解析’它并像标准调用堆栈一样显示给我”。不知道这在理论上是否可行,因为我不知道boost::context的细节,但它听起来是可以实现的。有没有人尝试过处理这个问题?