草庐IT

c++ - 插入 unordered_map 时没有匹配函数

我声明一个unordered_map如下:boost::unordered_map,t_torrent>torrent_ins;然后向其中插入一个元素(如果键不存在,该映射将返回新元素的引用)t_torrent&torrent_in=torrent_ins[to_array(in)];但是我收到一条错误信息:../src/Tracker/torrent_serialization.cpp:30:instantiatedfromhere/usr/local/include/boost/functional/hash/extensions.hpp:176:error:nomatchingf

c++ - Boost.Spirit.Qi - 规则开头的错误

如何检测规则开头的错误?例如,考虑MiniXMLexample包含在文档中。如果我向解析器提供如下内容:thisisanerror然后我得到:Error!Expectinghere:""Error!Expectinghere:""Parsingfailed.那很好,但接下来考虑喂它:element>thisisanerror我得到的是非常通用但不太有用的:Parsingfailed.我如何修改规则以提供信息的方式报告错误? 最佳答案 您希望需要文档根级别的元素。其他消息是由失败的期望点生成的。您会希望在开始时有一个额外的期望值。我会

c++ - 我如何扩展 boost spirit 语法

事情是我做了一个对任务有用的语法,但是现在任务已更改,我需要定义新规则。但我不想修改已有的语法喜欢创建一个新的语法,它使用我现有的没有代码的语法重复,所以我只需要定义我需要的新规则。我尝试了一些东西像这样,但不起作用:structNew_grammar:Old_grammar{New_grammar():New_grammar::base_type(Command_list){Command_list%=qi::eps>>+Commands;Comandos%=oneoldCommand|NewCommand;NewCommand=("NewCommand">>stmt)[qi::_v

C++:用共享和弱指针替换原始指针

我的程序遇到了设计问题。我必须管理作为根ChainDescriptor一部分的节点对象。基本上它看起来像下面这样:classChainDescriptor{public:~ChainDescriptor(){//deletethenodesinnodes...}voidaddNode(Node*);Node*getNode();conststd::list&getNodes()const;std::listm_nodes;};classNode{public:Node(Node*parent);voidaddChild(Node*node);Node*getChild(conststd

c++ - 在语义 Action 中 boost spirit 改变变量值

我想在语义操作中更改局部变量值,如下所示:#defineBOOST_SPIRIT_USE_PHOENIX_V3#include#include#includenamespaceqi=boost::spirit::qi;namespacespirit=boost::spirit;namespaceascii=boost::spirit::ascii;usingboost::phoenix::ref;usingboost::phoenix::bind;voiddummy(conststd::vector&v,int&var){var=7;}templatestructx_grammar:p

c++ - 默认初始化 boost::optional

有没有办法在不提供T的名字的情况下默认初始化一个boost::optional变量?structMyStruct{inta;};intmain(){boost::optionalopt;opt=MyStruct();//我的目标是在我只想默认初始化时省略提供结构名称​​opt。 最佳答案 如果您的编译器支持可变参数模板并且您使用的是Boost1.56或更高版本,请使用emplace()没有参数:opt.emplace();如果不满足任何一个条件(没有可变参数模板的编译器或较旧的Boost)使用不带参数的in_place工厂:opt=

c++ - 通过 boost 信号 2 的观察者模式

所以,我已经阅读了Boost.Signal2的文档,并且进行了一些谷歌搜索,但我还没有完全找到我需要的东西。我拥有的是一个Controller和一个View概念。Controller将向View发送数据以供其呈现。我想要的是我的Controller调用Controller::Update并在View中触发OnUpdate函数。Controller和View应该是分离的可以发出Controller上的信号以在View中执行Slots这是我到目前为止尝试过的代码:classListener{public:virtualvoidOnUpdate(){};};classView:Listene

c++ - 使用两个对象作为 unordered_map 或替代方案的哈希键

定义对象myType后,我需要存储这些对象之间的关系。这些关系存储在矩阵中。事先不知道元素的数量,并非所有元素都有关系(element1可以与element3有关系,但可能与5没有关系)并且内存是一个问题。例如它可能看起来像:element45与:具有特征[3,1;1,4]的元素3具有特征[1,1;1,1]的元素12具有特征[8,1;1,4]的元素1780element1661连接到:具有特征[3,1;6,4]的元素3具有特征[1,1;1,9]的元素1具有特征[8,1;1,1]的元素1780拥有:myType*element1;myType*element2;我想要类似的东西(正确指出

c++ - 如果在 user.hpp 中定义了 BOOST_NO_EXCEPTIONS,为什么不能编译 boost::shared_ptr

我有一个嵌入式系统,想在这个系统中使用boost,但需要禁用异常,因为我不想支付异常成本。boost给了一个user.hpp和可设置的宏选项BOOST_NO_EXCEPTIONS和BOOST_NO_EXCEPTION_STD_NAMESPACE,但是boost::shared_ptr不能编译(更准确的说,不能链接)如果定义了这两个宏。shared_ptr_boost.cpp:(.text._ZN5boost6detail12shared_countC2IiEEPT_[_ZN5boost6detail12shared_countC5IiEEPT_]+0x7a):undefinedrefe

c++ - 如何在 Casablanca 中优雅地解析 URI

如何在C++中优雅地解析请求的URI(服务器端)?URI定义为CasablancaDocumentation作为:protocol://server[:port]/path?query#fragment比方说,我希望路径(包含所有元素)作为列表,而查询作为键/值对列表http://server/foo/bar?val1=1&val2=yo会导致std::listpath;path.push_back("foo");path.push_back("bar");std::list>query;query.push_back(std::make_pair("val1","1"));query