草庐IT

boost-functional

全部标签

c++ - 我怎样才能从 boost::asio::post 获得 future ?

我正在使用Boost1.66.0,其中asio内置支持与futures的互操作(现在已经有一段时间了)。我在网上看到的示例说明了如何在使用async_read、async_read_some等网络功能时干净地实现这一点。这是通过提供boost::asio::use_future来完成的。代替完成处理程序,这会导致启动函数按预期返回future。我需要提供什么样的对象或将我的函数包装在其中才能从boost::asio::post获得相同的行为?我发布工作的目的是在链的上下文中执行它,否则等待工作完成,这样我就可以得到我想做的行为:std::packaged_tasktask([]{std

c++ - 访问并调用 std::function 的变体

我正在使用std::variant存储std::function的不同签名秒。所述函数存储在vector中,后者从map中检索。如何调用vector中的每个函数std::variant?我觉得我应该使用std::visit但我不知道正确的用法。#include#include#include#include#includeusingvar_t=std::variant,std::function>;enumclassEventEnum{A,B,C};structController{templatevoidsubscribe(var_tfn){auto&callbacksVec=cal

c++ - 将 lambda 传递给可变参数 std::function 时的类型推导

我正在尝试使用用于处理它们的函数的类型信息从数组元组中检索值。但是,由于(部分?)需要为std::function的类型名使用标识结构,因此在这种情况下类型推导失败。这里有没有办法恢复扣除?#include#include#includeclasscomp_a{public:staticconstsize_tid=0;intval=0;};classcomp_b{public:staticconstsize_tid=1;intval=0;};classcomp_c{public:staticconstsize_tid=2;intval=0;};templatestructstorage

c++ - 如果我使用 std::function 来捕获 lambda,我是否应该担心它被释放?

考虑以下代码,std::functionf=[](){};std::function*fp=newstd::function(f);每当程序离开这些行的上下文时(假设它们在函数内部被调用并且函数返回),f和fp的内存可能会在一些点。这很好,因为我只对fp感兴趣,而且我得到了它的拷贝。关键是有一个函数指针(fp),以后我可以随时调用它。所以,只要我不deletefp,问题就是:f是否会被释放,导致fp无效? 最佳答案 声明:std::function*fp=newstd::function(f);调用复制构造函数function(st

c++ - 从 lambda 构造 std::function 参数

我有以下模板化函数(编译器中启用了C++最新标准-但也许17就足够了)。#includetemplatevoidMyFunction(conststd::function&callback);intmain(){MyFunction(std::function([](int){}));MyFunction([](int){});}当我将它显式转换为std::function时,第一个调用编译通过,但第二个调用没有编译。在第一种情况下,模板推导是自动完成的,编译器只知道它应该将其转换为某个std::function并能够推导参数和返回类型。但是在第二种情况下,它应该(?)也知道lambd

c++ - boost static_vector 而不是 std::is_trivially_destructible

根据thisexample(左例)#include#includestructX{intk;std::arraya;boost::container::static_vectorb;~X()=default;};inthuh(){std::arrayx;return0;}看起来像boost::container::static_vector当T时可以轻易破坏是(当b被销毁时,不会在X上循环)。huh优化为xoreax,eax;ret(即return0不遍历数组。当我改用具有非平凡析构函数的包含类型时(右例)#include#includestructY{~Y();};structX{i

c++ - 基类中的唯一指针禁止实例化,错误为 "attempting to reference a deleted function"

我将我的C++工具链从VisualStudio2013更新到VisualStudio2017/2019。现在我遇到了一些形式的编译错误:(13):errorC2280:'OfflineFixture::OfflineFixture(constOfflineFixture&)':attemptingtoreferenceadeletedfunction(8):note:compilerhasgenerated'OfflineFixture::OfflineFixture'here(8):note:'OfflineFixture::OfflineFixture(constOfflineFi

c++ - Boost phoenix 或 lambda 库问题:从 std::vector 中删除元素

我最近遇到了一个问题,我认为boost::lambda或boost::phoenix可以帮助解决,但我无法获得正确的语法,所以我采用了另一种方式。我想做的是删除“字符串”中小于特定长度且不在另一个容器中的所有元素。这是我的第一次尝试:std::vectorstrings=getstrings();std::setothers=getothers();strings.erase(std::remove_if(strings.begin(),strings.end(),(_1.length()我最终是这样做的:structDiscard{booloperator()(std::set&co

c++ - 如何根据 RFC 3339 格式化 boost::date_time-object

我想在boost中使用date_time库来表示我的应用程序中的时间。此应用程序将生成Atom提要,后者又会以RFC3339中指定的格式强制要求时间戳。,例如“1990-12-31T23:59:60Z”或“1990-12-31T15:59:60-08:00”。那么,我该如何根据这个RFC格式化时间呢?我一直在阅读DateTimeInput/Outputdocumentation一整天,我似乎无法找到如何在需要时将Z放在最后。此外,RFC支持可选的小数秒,但只有一位数字(例如“1990-12-31T23:59:60.5Z”)(*)。我似乎也不知道该怎么做。我总是可以编写自己的格式化例程来

c++ - 公共(public) boost::signal 对象

我做了我的boost::signal公开是因为我很懒。classButton{public:signalclicked;};intmain(){Buttonbtn;btn.clicked.connect(handleClick);}...而不是用Button::OnClicked(boost::function)封装.这会回来咬我吗? 最佳答案 这取决于。以前,每当一个对象连接到另一个对象的信号时,我都想添加一些特殊的逻辑,这让我很头疼。这是最有可能咬到你的情况。此外,它可能会导致难以准确跟踪其他对象何时连接到任何给定对象。为了安全