草庐IT

T_OLD_FUNCTION

全部标签

c++ - Lambda 函数作为构造函数中 std::function 的默认参数

我想在类的构造函数中为仿函数参数设置一个默认仿函数。作为一个最小的例子,我想出了一个应该作为过滤器服务的类,如果过滤器函数返回true,它会过滤T类型的元素。过滤器函数应在构造函数中提供,默认为“接受所有”过滤器函数:templateclassFilter{public:typedefstd::functionFilterFunc;Filter(constFilterFunc&f=[](constT&){returntrue;}):f(f){}private:FilterFuncf;};我像下面这样实例化模板类:intmain(){FiltersomeInstance;//Nofilt

C++11:使用 std::function::target() 指向成员函数的指针

我知道这已经是一个讨论已久的话题,但我还找不到令我满意的答案。问题简而言之:即使使用C++11的function::target()功能,是否也无法将成员函数指针传递给C风格的方法?以下代码将不起作用:对mbf.target()的调用将返回0,因此会产生SEGFAULT。而且我不明白为什么,因为我把成员函数绑定(bind)到一个泛型函数对象上,所以类型应该没问题。我做错了什么还是我在尝试做一些不可能的事情?#includeusingnamespacestd;typedefvoid(*CBType)(int,int);CBTypemyCB=0;voidregCallback(CBType

c++ - 定义 std::hash<std::function>

我需要创建一个模板类,它可以保存指向T类型元素的指针。然后对它们执行功能。这些函数会来自不同的地方,所以我需要一个容器来存储它们,以便以后调用它们。我决定使用std::unordered_set,因为它提供了速度并限制了重复,因为它被实现为哈希表。我编写了整个类,但由于没有为我的std::function定义的散列函数,所以无法编译。它采用T类型的指针并返回void.用struct hash>指定它很容易(并且还重载了()运算符)对于我使用的每种类型,但我实际上如何对函数进行哈希处理?这是我的类(class)中相关成员和方法的精简摘录:templateclassMaster{priva

c++ - 用名称标记 std::function?

我正在开发一个解析器组合器库,我真的希望我的解析器只是一些可调用对象:typedefstd::functionparser;这使得解析器组合器很好,例如:parseroperator&(parsera,parserb){returnboth(a,b);}但是我想要两个功能:1)我希望字符串文字自动提升为解析器,这样您就可以执行以下操作:parseroption="]+");2)我希望解析器具有可用于错误格式化的名称。在上面的“两者”解析器的情况下,我可以打印出我期望的a.name()和b.name()例如。到目前为止我尝试过的两个选项是一个可调用的解析器类,这让我可以从字符串和std:

C++ 重载:字符串文字与 boost::function 歧义

我的问题代码:#include#includevoidfunc(conststd::string&){}voidfunc(constboost::function&){}intmain(){func(main);//goodfunc("bad");return0;}=>error:callofoverloaded‘func(constchar[4])’isambiguousoverload.cpp:4:note:candidatesare:voidfunc(conststd::string&)overload.cpp:5:note:voidfunc(constboost::functi

c++ - lcov 问题 : weird duplicate constructor marked as not covered & function not marked as covered, 即使其行已被执行

在我通过启动并运行一个100%覆盖率的小型C++测试项目来了解更多关于自动化测试的过程中,我遇到了以下问题——尽管我所有的实际代码行和所有执行分支都是被测试覆盖,lcov仍然报告两行未经测试(它们只包含函数定义),以及一个据称未经测试的“重复”构造函数方法,即使它匹配我的“真实”构造函数(唯一定义和使用过的构造函数)完美。(跳到编辑最小复制案例)如果我使用gcovrpython脚本生成相同的覆盖率统计数据(来自相同的确切来源,.gcno和.gcda文件)并将结果传递给JenkinsCobertura插件,它会在所有计数上为我提供100%-行,条件和方法。我的意思是:JenkinsCob

c++ - "error: no matching function for call to"构造未初始化的结构时

我正在尝试使用boost::lockfree::spsc_queue有了这个websocketserver而不是std::queue用于m_actions以包含此struct:enumaction_type{SUBSCRIBE,UNSUBSCRIBE,MESSAGE};structaction{action(action_typet,connection_hdlh):type(t),hdl(h){}action(action_typet,server::message_ptrm):type(t),msg(m){}action_typetype;websocketpp::connecti

c++ - Mingw 'std::function' 还没有声明?

首先,我在带有最新mingw版本的Windows上使用代码块。我正在使用sfml库开始游戏,但不幸的是我遇到了这个问题。我需要为我的状态管理器使用std::function,但它一直显示相同的错误:'std::function'尚未声明。我做了#include并使用了链接器选项-std=c++0x,但仍然没有成功。唯一不能编译的是这个头文件:#ifndefSTATEMANAGER_HPP_INCLUDED#defineSTATEMANAGER_HPP_INCLUDED#include#include"State.hpp"#include#includeclassStateManager

c++ - std::is_convertible 与 std::function 不一致

当涉及std::function对象和std::bind时,我注意到std::is_convertible和std::is_assignable有一些奇怪的结果。我假设当这些函数返回true时,可以进行转换。还是我遗漏了什么?以下代码在不同的编译器上打印不同的结果,我希望它打印0,因为这些类型无法分配。#include#include#includeintmain(){std::cout,std::function>::value它在以下编译器上打印0:gcc4.8和gcc4.9clang3.4(但不是来自ubuntu12.04的那个)它在以下编译器上打印1:海湾合作委员会4.7VC+

c++ - 构造函数执行顺序/顺序 : dependent initialization of static variable (class instance) in a function

对于以下代码段:classBar{public:intx;inty;Bar(int_x,int_y){/*somecodeshere*/...}};classFoo{public:intx;inty;intz;Foo(Barb):x(b.x),y(b.y){z=someFunction(x,y);}};voidf(intx,inty){Barb(x,y);staticFoox(b);}intmain(){f(2,3);}在我看来,函数内的静态变量甚至应该在main()之前初始化。但是,Foo类型的静态变量x依赖于Bar类型的局部变量b。问题是:1)x的构造函数什么时候执行?即x是在第一