草庐IT

make_function

全部标签

c++ - 如何创建boost phoenix make_shared?

是否可以创建std::make_shared的boostphoenix惰性变体?我的意思是,让类似的事情成为可能namespacep=boost::phoenix;...expr=custom_parser[_a=p::make_shared(_1,_2,_3)]>>...由于std::make_shared的可变模板性质,不能使用BOOST_PHOENIX_ADAPT_FUNCTION。所以,如果可能的话,包装器应该是可变参数模板本身。 最佳答案 如果你能省下一组额外的括号:namespace{templatestructmake

c++ - 为什么 std::function<boost::any ()> 在这种情况下不起作用?

我遇到过需要这种功能的情况:MoveOnlycreateMoveOnly();存储在这里:std::functionfactory=&createMoveOnly;据我所知,这应该可行,因为MoveOnly可以转换为boost::any使用支持boost.any移动语义的boost1.55,它不起作用。它会触发有关尝试在boost::any的持有者内部为MoveOnly使用已删除的复制构造函数的错误。但是正确选择了Boost.Any的顶级构造函数(它使用模板化的ValueType&&来转发参数)。也许问题出在std::function中。有什么提示吗? 最佳

c++ - std::vector of function pointers:不同的模板参数

为什么下面会编译std::vectorfunc_ptrs;但这不是std::vectorfunc_ptrs?在第二种情况下,我收到了那些丑陋的STL错误消息之一,所以我不打算将所有内容都放在这里,但在消息的末尾我得到了这个/usr/include/c++/4.8/bits/stl_construct.h:102:30:error:ISOC++forbidsincrementingapointeroftype‘int(*)(double)’[-fpermissive]for(;__first!=__last;++__first)这似乎暗示C++将类型int(double)转换为int(*

c++ - std::make_shared/std::make_unique 不使用列表初始化有什么原因吗?

具体来说:直接列表初始化(cppreference.com(3))。两者都是std::make_shared和统一初始化特性在C++11中被引入。所以我们可以在堆上分配对象时使用聚合初始化:newFoo{1,"2",3.0f}.这是一种直接初始化没有构造函数的对象的好方法,例如聚合、pod等。根据我的经验,现实生活中的场景(例如在函数中声明临时结构)以有效地向lambda提供参数集变得非常普遍:voidfoo(){structLambdaArgs{std::stringarg1;std::stringarg2;std::stringarg3;};autoargs=std::make_s

c++ - 一个 const std::function 包装一个非常量 operator()/mutable lambda

考虑以下示例:#include#includestructA{inti;voidoperator()(){std::coutconst&fun){fun();}intmain(){conststd::functionf{A{}};test(f);test(f);}在这里,conststd::function能够调用非constoperator().输出:12如果我提供一个mutablelambda,也会发生同样的情况,例如test([x=0]()mutable{++x;});这怎么可能?conststd::function可以包装可变仿函数是否正常? 最佳答

c++ - C++0x 中 std::make_tuple 的问题

使用VisualStudio10编译以下程序时,出现了很多编译错误:#include"stdafx.h"#include#include#include#includeint_tmain(intargc,_TCHAR*argv[]){typedefstd::tuplekey_t;typedefstd::mapmap_t;map_tthe_map;autok=std::make_tuple("one","two");the_map[k]="thevalue";autoq=std::make_tuple("one","two");autoi=the_map.find(q);std::cou

c++ - 视觉 C++ 错误 : function must return a value

我正在做一个多平台项目,有些平台禁用了功能,在这些功能的界面中,我经常做的事情是这样的:boolFoo::bar()const{//disabledabort();}GCC/LLVM不要求非void函数返回值(它们只是给出警告),在这种情况下,我调用abort()时,它们足够聪明,甚至不会发出警告(因为该函数永远不会返回)。有没有办法(编译标志?)让VisualC++2010以相同的方式运行,这样我就不会继续破坏Windows构建?我知道我总是可以在中止后返回值,但在其他平台上工作时我通常会忘记这一点,不给出错误的行为似乎更合适。 最佳答案

c++ - 计时代码 "C2440: ' <function-style-cast >' : cannot convert from ' _CR' to 'std::chrono::milliseconds' 中的一个奇怪错误

我偶然发现了一个奇怪的错误C2440:'':cannotconvertfrom'_CR'to'std::chrono::milliseconds'基本上相当于HowardHinnant'sanotherquestion中的代码.这应该在VisualStudio2012RC上编译吗?这个问题的原因是什么?修复或解决方法如何?我的目标只是创建一个简单的计时器(没什么太严肃的),所以如果存在这种效果,将采取点-以及其他实现线索。问题代码如下。用法:timers::stopwatchw;w.start();std::cout并且头文件是(为简洁起见省略了实现)namespacetimers{c

【Linux】gdb调试与make/makefile工具

目录导读1.make/Makefile1.1 引入1.2概念1.3语法规则1.4 示例2. Linux调试器-gdb2.1引入2.2概念2.3使用导读我们在上次讲了Linux编辑器gcc\g++的使用,今天我们就来进一步的学习如何调试,以及makefile这个强大的工具。1.make/Makefile1.1 引入会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作1.2概念在

c++ - Arcsynthesis OpenGL 3.3 教程的问题 - MAKE 错误

我一直在关注arcsynthesis(arcsynthesis.org/gltut/)教程并在制作过程中遇到以下错误。我使用premake4gmake来生成makefile。====BuildingTut13BasicImpostor(debug)====Creatingobj/Debug/Tut13BasicImpostorBasicImpostor.cppLinkingTut13BasicImpostor/usr/bin/ld:../glsdk/freeglut/lib/libfreeglutD.a(freeglut_window.o):undefinedreferencetosy