草庐IT

boost-type-erasure

全部标签

c++ - Boost套接字 - 客户端没有从服务器接收所有字节

我正在使用C++开发应用程序,但在使用boost套接字时遇到了一些困难。服务器发送图像,但并非所有字节都被客户端接收;客户端总是收到比服务器发送的少大约500个字节。下面提供程序运行的相关代码和截图。服务器代码:intsent=boost::asio::write(*socket,response,boost::asio::transfer_all(),error);std::cout客户端代码(我知道如果服务器发送的总字节数能被10000整除,read_some会阻塞;此代码仅用于测试):intlen=0;intcount=0;do{len=socket->read_some(boo

c++ - "non-const lvalue reference to type cannot bind"引用错误(类型&)但指针错误(类型*)

我收到此错误“输入‘Cell’的非常量左值无法使用此代码绑定(bind)到‘Cell*’类型的临时对象:classRegionHolder{public:RegionHolder(Region&Region1):m_RegionCellNOO(&(Region1.m_NOO))~RegionHolder();protected:Cell&m_RegionCellNOO;//differenceishere};但不是这个:classRegionHolder{public:RegionHolder(Region&Region1):m_RegionCellNOO(&(Region1.m_NO

c++ - Boost mpl 转换序列 "real"类型

请参阅boostmpl转换文档中的以下代码:typedefvectortypes;typedefvectorpointers;typedeftransform>::typeresult;BOOST_STATIC_ASSERT((equal::value));我想了解boost::mpl的类型系统以及“它实际上是如何工作的”。据我了解,mpl::equal只是比较以下两个序列的元素,而不是整个序列类型本身。我不明白为什么以下失败:BOOST_STATIC_ASSERT((std::is_same::value));//为什么结果类型与“指针”类型不是100%相同?我认为这是某种原因,因为

c++ - 如何使用 boost::spirit 验证代数语句?

我正在尝试扩展calculatorexample因此,解析器将确定代数语句是否为真,而不是解析和评估代数表达式。我的意思是这样的语句1+5*5-10=19-3(期望的解析器结果是true)和3-1=9(所需的解析器结果为false)。我必须承认我是boost::spirit的新手,目前我有点不知所措。但是,我确实觉得我对计算器示例的理解足够好,至少可以取得一些进展。使用提供的示例作为起点,语法如下所示:calculator():calculator::base_type(expression){usingqi::uint_;usingqi::_val;usingqi::_1;expre

c++ - 在 C++ Builder 中编译 Boost 库时的警告

当我尝试包含时收到警告在C++生成器中。对于我包含的每个单元,C++Builder都会显示这两行:thread_heap_alloc.hpp(59):W8128Can'timportafunctionbeingdefinedthread_heap_alloc.hpp(69):W8128Can'timportafunctionbeingdefined已经尝试了一些东西,但没有任何效果。它编译正确,但是,它让我很紧张。为什么显示此消息?行是:#includenamespaceboost{namespacedetail{inlineBOOST_THREAD_DECLvoid*allocate

c++ - boost asio 以写入文件

我想异步写入文件。我有一个带有函数的类,该函数接受vector和文件名,并将其发送到文件。这个函数可以从类外被调用几千次。我想执行写异步的原因是......调用者可以只请求写,然后不必担心或等待写完成。我没有使用套接字、tcp...我正在研究boost::asio,试图找到例子——我能找到的都是使用网络的例子:http://liveworkspace.org/code/3R3RUd%240SerializeandsendadatastructureusingBoost?boost::asioasync_readguaranteeallbytesareread还有更多。有人可以推荐一个文

c++ - 可以在运行时在不同的 Boost 伪随机数生成器之间进行选择吗?

我正在使用BoostRandom库为蒙特卡罗模拟生成随机数。为了检查我的结果,我希望能够为不同的运行使用不同的RNG引擎。理想情况下,我想使用命令行选项来确定在运行时使用哪个RNG,而不是例如在编译时通过typedef选择RNG。是否有一个基类T使得类似下面的事情成为可能;或者,如果不是,为什么不这样做的明显原因?#includeintmain(){unsignedcharrng_choice=0;T*rng_ptr;//base_classpointercanpointtoanyRNGfromboost::randomswitch(rng_choice){case0:rng_ptr=

c++ - Boost Spirit 报错

我的解析器语法底部有以下错误处理程序:qi::on_error(launch,std::cerr(spirit::_3,spirit::_2)问题是解析器的输入没有事先被新行打断,因此生成的错误语句将是源代码中从错误点到结尾的所有行。有没有直接的替代方法phoenix::construct(spirit::_3,spirit::_2)只打印发生错误的那一行?如果我尝试只搜索'\n',Phoenix语义给我带来了麻烦。 最佳答案 我们需要创建一个可以接受Spirit参数的Phoenix函数。//lazyfunctionforerror

c++ - "duplicate data type in declaration"是什么意思?

请看一下这段代码:QListcontainerList;autowasAlreadyMoved=[&containerList](cItem*item)->bool{//contains(item))returntrue;returnfalse;};我在Ubuntu13.04下使用QtCreator2.8.0和Qt5.1.0。我还使用Clang3.2.1作为编译器。上面的代码编译正常(没有错误,没有警告),但是QtCreator用红线在标记的代码行下划线(就像错误一样):如果我将鼠标悬停在它上面,它会显示“声明中的重复数据类型”,我不知道这是什么意思。它是最简单的lambda,我没有发

c++ - 在 boost::spirit::qi 中,是否可以在运行时动态修改规则定义

我用boost::spirit::qi::rule写了一些语法来解析互联网数据包。语法是这样的:qi::rulestart,request,response,status,query;start=(request|response|status|query)>>lit("\r\n");为了boost性能,用户可能希望在运行时跳过一些规则,例如忽略“response”、“status”、“query”,只尝试匹配请求,因此规则将更改为:start=(request)>>lit("\r\n");这有可能吗?例如,是否有像“disable()”这样的函数来禁用规则“re​​sponse”、“