草庐IT

unique_future

全部标签

c++ - 为什么 boost::future<T>::then() 产生一个新线程?

将延续附加到boost::future时,延续在新线程中执行:std::coutp;boost::futuref=p.get_future();p.set_value();boost::futuref2=f.then([](boost::future){std::cout这段代码输出:main:0x7fff7a8d7310future:0x101781000为什么.then()允许这样做,更重要的是,有没有办法自定义这种行为?从promise/packaged_task/async返回的future是否有不同的行为? 最佳答案 @i

c++ - 工厂、unique_ptr 和 static_cast

考虑具有基对象、派生接口(interface)和最终对象的多态类://baseobjectstructobject{virtual~object()=default;};//interfacesderivedfrombaseobjectstructinterface1:object{virtualvoidprint_hello()const=0;templatestaticvoidon_destruction(object*/*ptr*/){std::cout在实际用例中,最终对象是通过插件系统定义的,但这不是重点。请注意,我希望能够在销毁对象时调用on_destruction(请参阅

C++ 11 future_status::deferred 不工作

#include#include#includeusingnamespacestd;usingnamespacestd::chrono;intsampleFunction(inta){returna;}intmain(){futuref1=async(launch::deferred,sampleFunction,10);future_statusstatusF1=f1.wait_for(seconds(10));if(statusF1==future_status::ready)cout在上面的示例中,我期望future_status被deferred而不是timeout。sampl

c++ - 当 std::future 准备好被检索时向主线程发送信号

我正在尝试理解std::async、std::future系统。我不太明白的是,您如何处理运行多个异步“任务”,然后根据第一个、第二个等返回的内容运行一些额外的代码。示例:假设您的主线程处于一个简单的循环中。现在,根据用户输入,您通过std::async运行多个函数,并将future保存在std::list中。我的问题是,如何从std::async函数传回可以指定哪个future完成的信息?我的主线程基本上处于消息循环中,我需要做的是让std::async运行的函数能够对消息进行排队,该消息以某种方式指定哪个future是完整的。问题是该函数无法访问future。我是不是漏掉了什么?这

c++ - 组合返回 future 的功能

假设我有两个返回future的函数:std::futurefoo(int);std::futurebar(Tconst&);我想将这两个函数组合成一个接受int的函数作为参数并返回std::future.这个函数应该怎么写?是否可以为返回futures的函数概括函数组合?std::futurefoobar1(intx){autofoo_x=foo(x);returnbar(foo_x.get());}此函数将阻塞直到foo返回的future完成了吧?这显然不是我想要的。std::futurefoobar2(intx){returnstd::async([=](){autofoo_x=f

c++ - Eclipse CDT 索引和 std::unique_ptr

我在这段代码中使用了std::unique_ptr,它按我预期的方式编译和运行。std::stringstreamout;outs(newstd::string(out.str()));s->insert(s->end()-2,1,'.');returnstd::move(s);但是,我从EclipseCDT收到错误消息。第四行:Method'insert'couldnotberesolved,Method'end'couldnotberesolved.以前,我也遇到过出现名称std::unique_ptr的错误。这已通过设置预处理器符号__GXX_EXPERIMENTAL_CXX0X

c++ - 升压::变体; std::unique_ptr 和复制

这个问题确定不可复制类型不能与BoostVariant一起使用树类templateclassTree{private:classTreeNode{public:std::unique_ptrNodesMoveconstructorsandmoveassignment+otherpublicmembersprivate:TreeNode(constTreeNode&other);(=deletenotsupportedoncompiler)TreeNode&operator=(constTreeNode&rhs);(=deletenotsupportedoncompiler)};//En

c++ - unique_ptr 的内存占用

这个问题在这里已经有了答案:Howcanstd::unique_ptrhavenosizeoverhead?(2个答案)关闭7年前。unique_ptr实例(没有自定义删除器)是否具有与原始指针相同的内存占用空间,或者实例存储的不仅仅是指针?

c++ - 如果键已经存在,则在不删除指针的情况下将 unique_ptr 插入映射的有效方法

这个问题在这里已经有了答案:C++insertingunique_ptrinmap(3个答案)关闭3年前。简单的方法显然是std::map>mymap;autof=mymap.find(5);std::unique_ptrmyptr;if(f==mymap.end())mymap.insert({5,std::move(myptr)});但是,这看起来效率不高,因为我必须在map中找到key两次。一个检查键是否不存在,插入函数也会做同样的事情。如果我简单地使用mymap.insert({5,std::move(myptr)});然后如果pair.second返回false(key已存在

c++ - 将 std::unique_ptr 类成员标记为 const

许多使用std::unique_ptr来管理类依赖项所有权的示例如下所示:classParent{public:Parent(Child&&child):_child(std::make_unique(std::move(child))){}private:std::unique_ptr_child;};我的问题是将_child成员标记为const是否会产生意想不到的副作用?(除了确保不能在_child上调用reset()、release()等)。我问是因为我还没有在示例中看到它,也不知道这是故意的还是只是为了简洁/一般性。 最佳答案