草庐IT

block_until_this_function_has_bee

全部标签

c++ - 继承类中的 shared_from_this() 类型错误(是否有 dyn.type-aware 共享指针?)

我有一个使用enable_shared_from_this的ViewController基类classViewController:publicstd::enable_shared_from_this{//...};和一个child:classGalleryViewController:publicViewController{voidupdateGallery(floatdelta);}问题出现了,当我尝试将我当前的实例传递给第3方时(比如lambda函数被安排在某处)实例(GalleryViewController)会释放一个(罕见的)条件,所以我不能直接捕获“this”,我需要用

c++ - 将整数类型转换为枚举 : functional cast vs initialization

假设有一个这样的枚举:enumfoo:int{first,second}然后我使用它如下:foof(1);//error:cannotinitializeavariableoftype'foo'withanrvalueoftype'int'foof=foo(1);//OK!我想知道这两者有什么区别?我知道第二个版本可以看作是函数式转换,但为什么这会有什么不同?例如,如果我这样做:classBar{};Barb=Bar(1);//nomatchingconversionforfunctional-stylecastfrom'int'to'Bar'我显然得到了一个有意义的错误。因此,这让我

C++17 <functional> 模板参数推导不适用于 Xcode 10.1

我一直在尝试使用C++17(及更高版本)进行模板参数推导,并试图从cppreference.com编译这个确切的示例#includeintfunc(double){return0;}intmain(){std::functionf{func};//guide#1deducesfunctioninti=5;std::functiong=[&](double){returni;};//guide#2deducesfunction}它在该页面上的基于Web的编译器中编译并运行良好,但是当我尝试在我的MacbookPro上编译它时,它失败了,说error:noviableconstructor

c++ - 错误 "lambda is not derived from ' std::function'

我正在尝试将lambda传递给通过可变参数模板定义的std::function,但似乎这在gcc上不起作用。有什么原因,为什么这段代码在gcc7.4.0上不起作用,但在VisualStudio2017上却能正常工作?有没有办法让它在gcc上也能工作,而无需先手动将其转换为std::function?#includetemplateintTestFunction(std::function){return0;}voidTest(){autofce=[](int/*n*/,double/*d*/){};//Thisdoesn'tworkwitherrornomatchingfunction

C++ Eclipse 调试器 : "Cannot find bounds of current function" and doesn't stop at breakpoints

我是第一次使用Ubuntu,而eclipse的调试器给我带来的麻烦超出了我的处理能力。目前我只想弄清楚如何让“无法找到当前函数的边界”停止,这样我就可以看到我的控制流在哪里出错了。我知道这是一个模糊的问题,但我愿意快速提供任何类型的必要信息。我在谷歌上搜索了大约2个小时的信息,打开和关闭不同的东西都无济于事。我正在使用版本:3.4.1(我相信是最新的)另外,我的断点并不总是有效(成功率可能约为25%),即使我在构建之前设置它们也是如此。在程序崩溃之前,我的cout如果有任何帮助,我将不胜感激。我会在附近。 最佳答案 不是unhear

c++ - "this"GDB 回溯中的指针变化

我正在检查核心转储,并注意到在一个帧中的“this”指针与下一帧(在同一线程中)不同。不仅仅是一点点不同,它从0x8167428变成了0x200。我不太精通GDB,但这对我来说似乎不对。这是有问题的吗?如果是,原因可能是什么? 最佳答案 如果在不同的对象上调用下一帧中的函数(即使对象是同一类型),则this指针可以在gdb跟踪中的帧之间改变,因为这是为了具体实例。这可能不是您的问题。0x200不是this的有效值,几乎可以肯定表示某种类型的内存损坏。this指针有时存储在堆栈中并作为不可见的第一个参数传递给函数。因此,如果您损坏了堆

c++ - 将 lambda 转换为 std::tr1::function

使用带有tr1服务包和IntelC++编译器11.1.071[IA-32]的visualstudio2008,这与我的其他相关question我正在尝试为c++编写一个功能映射,它的工作方式有点像ruby​​版本strings=[2,4].map{|e|e.to_s}所以我在VlcFunctional命名空间中定义了以下函数templatevectormap(constContainer&container,std::tr1::functionf){vectortransformedValues(container.size());intindex=-1;BOOST_FOREACH(c

c++ - 指向 C++ 中内联 __asm block 的指针

所以我一直在VS2010中使用__asmblock,但我没能找到更好的方法来获取指向汇编block开头的指针。我知道如何做到这一点的唯一方法是声明一个void函数。一个问题是void函数在我的程序集block之前和之后都有自己的程序集,我必须通过获取函数的真实地址并添加偏移量来进行补偿。例子:C++voidmyfunc(){__asm{nopnopnopret}}会产生类似这样的装配:pushebpmovebp,espaddesp,8nopnopnopretnmovesp,ebppopebpretnmyfunc()如果执行,很可能会出错。 最佳答案

c++ - 我怎样才能让 boost::function 不那么宽松?

typedefboost::functionMyCallback;voidRegisterCallback(MyCallbackcallback);classA{public:voidGoodCallback(intintArg,boolboolArg){printf("callingGoodCallback(%d,%s)\n",intArg,boolArg?"true":"false");}voidBadCallback(intintArg){printf("callingBadCallback(%d)\n",intArg);}};intTestFunction(){A*myA=ne

c++ - 将公共(public) block 提取到 C++ 中的函数中

在处理C++代码时,我经常遇到一些问题。假设我有一个方法执行X、Y,然后执行Z。现在我想介绍另一个应该执行X、Y'、Z的方法。如果那是普通的旧C代码,那么我会使用通用代码创建函数X()和Z(),将它们声明为static以便编译器现在可以在需要时内联它们,因为此“模块”之外的代码无法调用它们。作为API一部分的方法将如下所示intM(args){X(foo);//thatcoulde.g.be"checkargsarevalid"./*herecomesM-specificcode*/Z(bar);//thatcoulde.g.be"update_state"}intM2(args){X