草庐IT

future_base

全部标签

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++ - 为什么在异常掩码未设置为 eofbit 时 getline() 抛出 'std::ios_base::failure'?

考虑以下代码:ifstreamin;try{in.exceptions(ifstream::failbit|ifstream::badbit);in.open(pConfLocation);}catch(ifstream::failuree){throwstd::runtime_error("Can'topenconfigurationfile\n");}vectorlns;strings;in.clear();while(!in.eof()){getline(in,s);boost::algorithm::trim(s);lns.push_back(s+='\n');}所以:我根据t

c++ - Clang claims that `member reference base type ' X' is not a structure or union`,但 X 是具有推导参数的结构模板

考虑以下代码:templatestructX{X(T){}voidfoo(){}};templatestructY{intobject=0;voidbar(){X(object).foo();}};Liveongcc.godbold.orgGCC8.2编译它,而Clang7吐出以下错误::13:18:error:memberreferencebasetype'X'isnotastructureorunionX(object).foo();~~~~~~~~~^~~~这对我来说像是一个错误。条件非常具体:如果任一结构不是模板,或者object不是成员变量,或者不涉及CTAD(类模板参数推导

c++ - 为什么 std::ofstream 在没有 std::ios_base::trunc 的情况下截断?

这个问题在这里已经有了答案:Doesstd::ofstreamtruncateorappendbydefault?(1个回答)关闭2年前。根据此C++引用:http://www.cplusplus.com/reference/fstream/ofstream/ofstream/,std::ofstream的默认打开模式是ios_base::out并且它没有提到隐含的其他模式。因此,我希望如果我用一个小文件覆盖一个大文件,大文件的“超出”部分应该保持不变,只有文件的第一部分应该被新的、更短的数据替换。另一方面,ApacheC++标准库用户指南(http://stdcxx.apache.o

c++ - 如何终止 std::future?

我对C++11std::future的一些事情感到困惑。我想动态平衡工作负载,所以如果有一些处理器空闲,我创建一个std::future和std::async来划分剩余的数据。它工作正常。std::futuref[MAX_CHILD];for(eachdataitem){if(found_idle_processor)f[i]=std::async(...);process();}//Atlast,querytheresultoff.for(eachfuture)hold=f[i].get();但有时,一旦找到一些特殊数据项,所有其他数据将被丢弃,程序应立即给出最终结果,然后启动另一个

c++ - 实现观察者模式时出现问题 : "Member reference base type ________ is not a structure or union"

我一直在实现准系统观察者模式,但遇到了一个有点神秘的错误:“成员引用基类型‘Observer*’不是结构或union”。我认为这与我对模板的使用有关,我对模板的使用仍然相当不舒服。这是有问题的代码(为了简化事情而删除了大多数缺点/析构函数):主题界面:classSubject{public:virtualvoidnotify();private:listm_observers;};主题实现:voidSubject::notify(){list::iteratori;for(i=m_observers.begin();i!=m_observers.end();i++){*i->updat

c++ - GCC 中的 "empty base optimization"是否可配置?

考虑这些类型:structA{};structB:A{inti;};sizeof(A)>0按照标准要求。由于空基优化,sizeof(B)应为4。然而在GCC4.1.1上它是5(我在这个区域使用一包1)。并且不一致-我的一些文件得到了它,有些没有。还不能确定有什么区别,我们有一个很大的项目。在我使用的其他三个编译器(Microsoft和Freescale)上,我没有这个问题。根据thisarticle,空基优化显然是可选的.在GCC4.1.1中是否有编译器选项或pragma来调整它?我可以解决这个问题,但我想先了解发生了什么。我用Google搜索了一段时间,似乎找不到任何东西。

c++ - 警告 : overloaded virtual function "Base::process" is only partially overridden in class "derived"

我低于警告。我的部分代码是:classBase{public:virtualvoidprocess(intx){;};virtualvoidprocess(inta,floatb){;};protected:intpd;floatpb;};classderived:publicBase{public:voidprocess(inta,floatb);}voidderived::process(inta,floatb){pd=a;pb=b;....}我低于警告:Warning:overloadedvirtualfunction"Base::process"isonlypartiallyo

c++ - std::shared_ptr::owner_before 和 std::owner_less: "owner-based order"到底是什么意思?

我发现了一些关于此的讨论,但似乎没有任何内容明确说明“基于所有者的订单”到底是什么。它是否有效评估关于拥有的指针内存地址的值? 最佳答案 它定义了一个任意严格的弱排序,在该排序下,两个指针当且仅当它们共享所有权或均为空时才等效。等价以通常的方式定义:boolequivalent(p1,p2){return!p1.owner_before(p2)&&!p2.owner_before(p1);}这并不一定意味着它们指向同一个对象。两个指针可以指向不同的对象但仍然共享所有权:structthing{intn;};shared_ptrt1=