草庐IT

first-class-functions

全部标签

c++ - std::function 在堆栈数组中使用时崩溃

在MSVisualC++2010SP1中,此代码崩溃:#include"stdafx.h"#include#include//#includeinta=0;int_tmain(intargc,_TCHAR*argv[]){//thiswayitworks://std::vector>s;//s.push_back([](){a=1;});//s.push_back([](){a=2;intb=a;});std::functions[]={[](){a=1;},[](){a=2;//Problemoccursonlyifthefollowinglineisincluded.Whencom

c++ - "first-chance exception..."消息中的十六进制数字是什么意思?

例如,在消息中:First-chanceexceptionat0x757bd36finfoo.exe:MicrosoftC++exception:_ASExceptionInfoatmemorylocation0x001278cc..0x757bd36f和0x001278cc是什么意思?我认为0x757bd36f表示抛出异常时的EIP,但是第二个数字呢? 最佳答案 正如您所猜测的,第一个是异常发生时的EIP(或RIP,对于64位代码)。做一些测试,第二个数字是被捕获的异常对象的地址。但是请记住,这与抛出的异常对象的地址不相同。例如,

c++ - 为什么将 T 从外部模板作为默认参数传递给 std::function 会导致编译错误?

我创建了一个模板类,并将T作为默认类型参数传递。但是,这会导致编译失败。任何人都可以解释发生了什么?谢谢!附言。我使用的编译器是VS2012。#includeusingnamespacestd;templatestructdelegate{typedeffunctionfunction_t;function_tf;};intmain(){delegated;return0;}编译器输出:1>.\MicrosoftVisualStudio11.0\VC\include\functional(554):errorC2027:useofundefinedtype'std::_Get_func

c++ - std::vector 的 std::functions 查找

我有一个填充有回调函数的vector,我想在添加之前检查是否已经存在回调函数。我不知道它是否会工作,但到目前为止它甚至无法编译。vector>_callbacks;voidEvent::RegisterCallback(std::functioncallback){if(callback==NULL)return;vector>::iteratorit=std::find(_callbacks.begin(),_callbacks.end(),callback);if(it==_callbacks.end()){_callbacks.push_back(callback);}else{

c++ - std::bind 到 std::function 使用 Clang 崩溃

在将std::bind与std::function组合时,我无法理解一些细微之处。我已将我的问题最小化为以下代码片段:#include#includevoidbar(intx){std::coutf1=std::bind(bar,std::placeholders::_1);//CRASHESwithclang,worksfineinVS2010andVS2012std::functionf2=std::bind(f1,1);f2();return0;}注意到std::function的显式转换(在构建std::function时将auto替换为f2效果很好)。正在创建f2通过复制f1

c++ - 基于策略的模板设计 : How to access certain policies of the class?

我有一个使用多个模板化策略的类。它在以下示例中称为Dish。我将许多这样的Dish存储在vector中(使用指向简单基类的指针),但随后我想提取并使用它们。但我不知道他们的确切类型。这是代码;它有点长,但非常简单:#include#includestructDishBase{intid;DishBase(inti):id(i){}};std::ostream&operatorclassDish:publicDishBase{Appetizerappetizer_;Mainmain_;Dessertdessert_;public:Dish(intid):DishBase(id){}con

C++11可变参数模板(typename... Args模板参数包或class... Args)(Args... args函数参数包)(递归展开与参数包展开(只支持C++17))

文章目录C++可变参数C++可变参数模板示例(可变参数模板、递归参数模板、C++17折叠表达式)可变参数模板的使用方式有两种,递归展开和参数包展开递归展开参数包展开(只支持C++17)为什么`template`模板参数中`...`放`Args`前面,`voidprintSizeOfArgs(Args...args)`中`...`放`Args`后面?模板参数和函数参数有什么区别?C++可变参数C++可变参数是指函数的参数个数是可变的,可以在函数定义时不确定参数的个数,需要在函数体内通过特定的语法来处理这些参数。C++11标准引入了新的可变参数模板,使得可变参数的处理更加方便和灵活。在函数定义时,

c++ - 在父类(super class) union 之上覆盖子类 union

我想知道是否可以将成员附加到子类中的C++union。classA{...union{inta;intb;};};classB:publicA{...intc;//一个更具体的例子是标记union的想法,您希望有一个子类将类型添加到union。 最佳答案 你说,I'mwonderingifit'spossibletoappendmemberstoaC++unioninasubclass.该语言不允许扩展union。将成员附加到union是不可能的。更糟糕的是,class和struct可以通过创建子类(结构)来扩展,union不能有基

C++:template<class> 是什么意思?

我正在尝试理解一些C++代码。我是一位经验丰富的Java程序员,正在尝试学习C++。我已经阅读了一些关于模板的详尽文章,但没有人回答我以下模板规范是什么意思。templateclass,class>classVisualOdometryTT,templateclassNodeBuilderTT,classPoseGraphT>classVORosInterface{...};我不明白的部分是template我认为缺少某些类型规范的地方。但是代码编译没有问题。 最佳答案 以NodeBuilderTT为例,因为它更简单:NodeBuil

c++ - 具有不同参数的 std::functions 的集合

我正在尝试编写一个简单的调度程序,用户代码可以将回调附加到它。每个事件都有一个已知的签名,用户代码需要使用正确的数字和参数类型来调用调度。这是由可变参数管理的。但是,不接受freestandingInt,因为vector的类型不正确。如何使其通用?遵循一个最小的例子voidfreestanding(){std::cout>listeners;}Event;templatevoiddispatch(inteventNr,Args&&...args){for(autolistener:events[eventNr].listeners){std::functionf(std::bind(l