草庐IT

task_struct

全部标签

c++ - 使用 constexpr 或 struct 进行元编程

我们刚刚开始学习C++11中的模板元编程。作为练习,我们编写了一个输出int值的二进制表示的程序。我们提出了两种可能的实现方式。第一种使用带有枚举值的递归,而第二种方法使用constexpr函数。我们的期望是这两种实现都会产生相同大小的可执行文件。然而,第一个实现导致9064字节,而第二个实现有9096字节。我们不介意字节的微小差异,但不了解导致差异的原因。我们在没有优化标志的情况下使用GCC4.8.2编译了程序,但是,在-O2标志下发现了相同的结果。#includeusingnamespacestd;templatestructBin{enum{value=10*Bin>1)>::v

c++ - 将 packaged_task 移动到 lambda

我想在lambda中移动并调用boost::packaged_task。但是,我想不出一个优雅的解决方案。例如这不会编译。templateautobegin_invoke(Func&&func)->boost::unique_future//noexcept{typedefboost::packaged_tasktask_type;autotask=task_type(std::forward(func));autofuture=task.get_future();execution_queue_.try_push([=]{try{task();}catch(boost::task_a

C++ 缓存友好方式访问 `vector <struct_type>` 的所有元素的所有成员

我有兴趣针对多线程计算优化我的代码。在缓存、流水线或内存访问的任何其他方面,以下比较如何节省这些资源:案例一structsomething{floata;floatb;intc;boold;};vectorvec(n,something());for(intq=0;q案例二structsomething{floata;floatb;intc;boold;};vectorvec(n,something());for(intq=0;q案例三vectora(n);vectorb(n);vectorc(n);vectord(n);for(intq=0;q此外,是否有更好的方法来解决上述问题?

c++ - std::packaged_task 编译错误 w/gcc 4.6

我正在尝试使用std::packaged_task在线程中启动函数Queryquery;/*protobufobject*//*fillQueryobject*/std::packaged_tasktask([](Query&q)->SearchResults{index::core::Mergermerger;returnmerger.search(q);});std::futureftr=task.get_future();std::thread(std::move(task),query).detach();Edit2:再次更新代码以修复错误并包含完整的错误消息。g++-4.6(

c++ - 函数参数中的struct关键字,有什么区别?

我想知道,有什么区别:structNode{intdata;Node*next;};和structNode{intdata;structNode*next;};为什么我们在第二个例子中需要struct关键字?另外,有什么区别voidFoo(Node*head){Node*cur=head;//....}和voidFoo(structNode*head){structNode*cur=head;//....} 最佳答案 只有包含struct的声明在C中有效。在C++中没有区别。但是,您可以typedefC中的struct,这样就不必每

c++ - std::packaged_task 是如何工作的

我正在分析以下代码片段并试图详细理解它:templateautoThreadPool::add(FUNCTION&&Function,ARGUMENTS&&...Arguments)->std::future::type>{usingPackedTask=std::packaged_task::type()>;autotask=std::make_shared(std::bind(std::forward(Function),std::forward(Arguments)...));//getthefuturetoreturnlaterautoret=task->get_future(

c++ - `struct ap_conf_vector_t` 的定义在哪里?

Apache源代码中structap_conf_vector_t的定义在哪里?是在什么地方生成的? 最佳答案 ap_conf_vector_t似乎是一种不透明的数据类型。这通常在过去用于定义稳定api,以后可以在不更改api的情况下更改实现。ap_conf_vector_t仅用作api函数的参数,例如:ap_get_module_configap_parse_htaccess您不应该直接操作此结构的成员。一种OO编程,您只能使用提供的函数。 关于c++-`structap_conf_ve

c++ - has_type 模板为 struct type {} 返回 true;

有很多方法可以实现has_type推导ifT的模板有一个名为type的嵌套类或typedef.即namespacedetail{templatestructtovoid{typedefvoidtype;};}templatestructhas_type:std::false_type{};//thisonewillonlybeselectedifC::typeisvalidtemplatestructhas_type::type>:std::true_type{};或者templatechartest_for_type(...){return'0';}templatedoubletes

c++ - 调用struct中定义的友元函数需要前向声明?

在阅读Karlsson的BeyondtheC++Standard时,作者在classreference_counted的主体中定义了友元函数intrusive_ptr_add_ref(参见第36页)。该函数会在适当的时候使用参数相关查找自动调用。我从来没有见过在类的主体中定义友元函数,我试了一下发现如果不使用ADL查找,gcc4.4.3需要前向声明。事实上,如果没有前向声明,似乎无法引用adl_no。这是C++标准的一部分还是gcc的产物?(我没有Windows盒子,所以不能尝试VC)。#include#includenamespace{voidadl_no();//Removethi

C++ 无法将 lambda 转换为 std::pair 中的 std::packaged_task

我用std::packaged_task做了一些测试遇到了这个问题。std::packaged_tasktask([]()->int{return1;});task();编译和调用task()调用lambda。但是,这不会编译:std::pair>pair(15,[]()->int{return15;});pair.second();因为errorC2664:'std::pair>::pair(conststd::pair>&)':cannotconvertargument2from'main::'to'conststd::packaged_task&'然而,这确实编译:std::ve