草庐IT

Boost-asio

全部标签

c++ - 为什么 boost lockfree freelist 大小被限制为最多 65535 个对象?

为什么boostlockfree大小固定为65535个对象?typedefboost::lockfree::queue>MyQueue;MyQueuequeue(1024*100);上面的代码抛出异常。我在代码中找到的原因是基于数组的空闲列表仅支持16位地址空间。这是什么原因?我在64位Linux机器上使用它。那为什么要限制寻址到2**16项呢?队列是否使用“shortint”进行索引?原子指令是否只适用于16位字长?我应该怎么做才能拥有比这更大容量的固定大小队列? 最佳答案 无锁链表的Boost实现必须打ABAproblem.一个

c++ - boost 库中的 Nelder-Mead 算法

我想知道Nelder-Mead算法是否在c++boost库中实现,例如toms748_solve。我在文档中找不到它,在我自己实现代码之前我会问你。非常感谢。 最佳答案 我发现变形虫(Nelder-Meadedownhillsimplex)算法是由vnl库(http://public.kitware.com/vxl/doc/release/core/vnl/html/classvnl__amoeba.html#details)实现的,所以我打算使用这个库而不是boost。我知道我一直在使用boost::math库寻找这个算法的实现,

c++ - boost::filesystem、std::getenv 和并发

假设我有以下代码:#include#includevoidfoo(){constboost::filesystem::wpath&appdata_folder=std::getenv("APPDATA");while(true){boost::this_thread::sleep_for(boost::chrono::milliseconds(500));}}intmain(){boost::threadfirst(foo);boost::threadsecond(foo);first.join();second.join();}它在运行时失败并出现以下错误:*InternalProg

c++ - boost::asio UDP "gather"操作

async_receive()的boost::asio文档声明它支持“一次接收到多个缓冲区”,虽然我可以编写代码,但实际上看不到它是如何(或是否)工作的。我们遇到这样一种情况,我们的一家供应商每秒向我们发送数千个UDP数据包,这足以让我们在某些情况下看到“接收到的数据包被丢弃”数量激增。如果我们真的可以在一次async_receive()调用中填充多个缓冲区,那将是理想的,但在测试过程中,似乎即使指定了多个缓冲区,也只会为一个数据报调用处理程序。我已经包含了我的测试代码,抱歉它太冗长了,但我需要它能够灵活地监听多个接口(interface)/多播。#include#include#in

c++ - Boost.Locale 和 isprint

我正在寻找一种方法来显示UTF-8字符串,其中的不可打印/无效字符已转义。在ASCII时代,我习惯于使用isprint来决定字符是按原样打印还是转义。使用UTF-8,迭代更加困难,但Boost.Locale做得很好。然而,我没有在其中找到任何东西来决定某个字符是否可打印,甚至实际上是否有效。在下面的源代码中,字符串"Helloあニま➦??⊆?\x02\x01\b\xff\xff\xff"包含一些不可打印的坏人(\b例如)和其他是普通的无效序列(\xff\xff\xff)。我应该执行什么测试来确定字符是否可打印?//BasedonanexampleofBoost.Locale.#incl

c++ - boost::spirit::qi 关键字和标识符

我看过一些与qi语法中关键字/标识符使用的细微差别相关的帖子,但我不太明白boost示例中演示的方法应该如何工作......关键字声明:qi::symbolskeywords;示例关键字集:keywords.add("foo")("bar");标识符规则声明:qi::ruleidentifier;以下是qicalc和编译器示例中标识符规则的定义方式:identifier=!keywords>>qi::raw[qi::lexeme[(qi::alpha|'_')>>*(qi::alnum|'_')]];也许我读错了qi语法,但在我看来,这不会接受任何匹配或以关键字开头的文字。拒绝完全关键

c++ - WIll Boost的版本带有现代C++ "cutoff"吗?

现在使用C++17published,标准库现在涵盖了甚至更多的Boost库:可选,变体,任何,ASIO(在NetworkingTS中),协程(在TS中)等等。除了标准中已经包含的gob和Boost的gob,还请参见thisanswer。我意识到某些标准化版本的设计空间选择与Boost的略有不同,但本质上是相同的。鉴于这一事实,是否有计划发布Boost的替代版本(或只是-一个新的主线版本),其中包括:将大多数或所有这些功能作为Boost库让其余的Boost代码依靠它们在标准库中的可用性让Boost代码至少依赖于C++17语言,以使生活更轻松,并且代码对开发人员更易理解?如果不是-这是因

c++ - boost::optional deprecated get_value_or

我怀疑boost::optional的get_value_or已被弃用,因为如果将右值作为default参数传递是不安全的。但是,有时能够引用可选值或默认替代值很有用。以下安全吗?templateTconst&get_reference_or(boost::optionalconst&opt,Tconst&alt){if(opt)returnopt.get();elsereturnalt;}templateTconst&get_reference_or(boost::optionalconst&,T&&)=delete; 最佳答案

c++ - time_t boost 日期转换给出不正确的结果

我有一组unix时间戳,我正在转换为boost(1.65.1)日期,但是当它们在未来太远时,转换似乎会中断。2040年左右及以后的任何事情似乎都以某种方式回到了1900年后。给定以下代码...{std::time_tt=1558220400;boost::gregorian::datedate=boost::posix_time::from_time_t(t).date();std::cout...我得到以下输出...Date:2019-May-18Date:2037-Dec-27Date:1913-Feb-13...但是我期待以下输出...Expectedoutput:Date:20

c++ - boost 序列化 NVP 宏和非 XML 元素字符

当使用BOOST_SERIALIZATION_NVP宏为XML序列化创建名称-值对时,编译器很高兴地允许编译以下代码,即使元素名称不是有效的XML元素和异常在尝试将对象实际序列化为XML时抛出:BOOST_SERIALIZATION_NVP(_member[index])一个明显的解决方法是使用:boost::serialization::make_nvp("ValidMemberName",_member[index])但是谁能建议一种修改boost的方法,以便非法的元素名称会触发编译错误?(因此不依赖单元测试来捕获上述细微错误)编辑:一个想法是以某种方式声明一个虚拟局部变量,其中包