草庐IT

boost-mpl

全部标签

c++ - 将 Boost FileSystem3 迭代器转换为 const char*

我正在使用BoostFileSystem3循环遍历目录中的一些文件,我需要将文件名转换为char*以用于另一个库,不幸的是我的C++foo缺失,任何人都可以帮忙吗?intmain(intargc,char*argv[]){pathp(argv[1]);//preadsclearerthanargv[1]inthefollowingcodetry{if(exists(p))//doespactuallyexist?{if(is_regular_file(p))//isparegularfile?coutvec;//storepaths,vecv;//sowecansortthemlate

c++ - boost::asio::async_write() 与 boost::asio::write()

在将数据缓冲区传输到线路上所花费的时间方面是否有任何优势如果你使用boost::asio::write(m_socket,asio::buffer(dataOut_,len),asio::transfer_all());代替boost::asio::async_write(m_socket,boost::asio::buffer(hbs,sizeof(hbs)),boost::bind(&Client::handle_pulse,this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transfer

c++ - 有没有办法绑定(bind) template<template> 参数?

上下文我有一个自定义比较器,它采用另一个比较器并应用额外的检查:templateclassComparator,typenameT>structSoftOrder:publicstd::binary_function{booloperator()(constTlhs,constTrhs)const{returnComparator()(lhs,rhs)&&AnotherCheck();}};我有第二个类接受比较器,例如:templateclassComparator>classProcessor{...};实例化Processor很容易使用标准比较器(例如std::less),如下所示

c++ - Boost.Log 无法设置日志过滤器(未声明的标识符 'severity')

我正在努力让Boost.Log进入我的项目。问题出在这个简单示例的以下行中:usingnamespaceboost::log;core::get()->set_filter(trivial::severity>=trivial::info);在我的代码中,这转化为以下内容:boost::log::core::get()->set_filter(boost::log::trivial::severity>=boost::log::trivial::info);但是,我收到以下错误:errorC2039:'severity':isnotamemberof'boost::log::v2s_m

c++ - 当 -std=c++11 选项被删除时,clang++ 仅使用 boost::format 编译 C++11 程序

请看下面的C++11片段:#includeintmain(intargc,char**argv){autos=boost::format("");return0;}当我使用-std=c++11用clang编译它时,我得到以下错误:$clang++-std=c++11-omainmain.cppInfileincludedfrommain.cpp:1:Infileincludedfrom/usr/include/boost/format.hpp:19:Infileincludedfrom/usr/include/boost/detail/workaround.hpp:41:Infilei

c++ - 有没有更好的方法来检查是否存在 boost 共享内存段?

我能看到如何做到这一点的唯一方法是尝试访问它并捕获如果它不存在则抛出的异常。boolexists(){usingnamespaceboost::interprocess;try{managed_shared_memorysegment(open_only,kSharedMemorySegmentName);returnsegment.check_sanity();}catch(conststd::exception&ex){std::cout有没有更好的办法? 最佳答案 我在玩boost::interprocess时碰巧问了同样的问

c++ - 如何等待所有 boost 完成 :asio's stackful coroutines?

我正在用asio::spawn启动一些协程,我想等到所有协程都完成后再做一些其他工作。如何实现?控制流程如下:asio::spawn(io,[](asio::yield_contextyield){...//startingfewcoroutinesasio::spawn(yield,[](asio::yield_contextyield2){...});asio::spawn(yield,[](asio::yield_contextyield2){...});asio::spawn(yield,[](asio::yield_contextyield2){...});asio::spa

c++ - 静态成员和 boost 序列化

我正在使用Boost.Serialization归档类的内容。成员变量之一是静态std::vector。归档和恢复都很好,但我有点希望库只保存静态成员一次,看来,从文件大小来看,每个归档实例的静态成员都已完整保存。通过对静态vector使用set/getter并在类外部序列化静态vector一次,可以很容易地规避这一点。但我宁愿有一个独立的类(class)。是否有一种简单明了的方法来实现对类的静态内容仅归档一次? 最佳答案 在序列化所有类的实例之前序列化静态vector。如果你像这样序列化vector:templatevoidser

了解开源协议:GPL, LGPL, BSD, MIT, Apache, 和 MPL

摘要github中有很多的开源项目,如果是学习使用,并没有什么影响,但是如果是想商用,则一定需要了解不同开源协议的区别,以免踩坑,本文介绍五种开源协议GPL,LGPL,BSD,MIT,Apache,以及如何选择这几种协议。BSD开源协议BSD开源协议赋予使用者极大的自由。基本上,使用者可以随心所欲地使用、修改源代码,并将修改后的代码作为开源或专有软件再发布。然而,要享受这种自由,当您发布使用了BSD协议的代码或者以BSD协议代码为基础进行二次开发时,需要满足以下三个条件:如果再发布的产品包含源代码,必须在源代码中包含原始代码中的BSD协议。如果再发布的只是二进制类库或软件,需要在类库或软件的文

c++ - boost::asio::io_service 优先级如何工作?

我正在使用boost::asio::io_service来管理一些异步TCP通信。这意味着我创建了一个boost::asio::ip::tcp::socket并将io_service提供给它。当我开始交流时,它的示意图如下:异步解析->回调->异步连接->回调->异步写入->回调->异步读取我省略了resolve和bind等部分。假设套接字已绑定(bind)到端口并且主机名已解析(因此连接意味着建立到端点的真实连接)现在的重点是我可以使用相同的io_service对象启动多个异步连接。这意味着,例如,在我的io_service线程中,程序将要AsyncWrite一些数据,主线程将调用A