草庐IT

MYLIB_FUNCTION_ATTRIBUTE

全部标签

c++ - 从 std::function 调用签名推断模板参数

考虑这个模板函数:templateReturnTfoo(conststd::function&fun){returnfun();}为什么编译器不能从传递的调用签名中推断出ReturnT?boolbar(){/*...*/}foo(bar);//worksfoo(bar);//error:nomatchingfunctioncall 最佳答案 bool(*)()类型的函数指针可以转换为std::function但不是同一类型,因此需要转换。在编译器可以检查该转换是否可能之前,它需要推导出ReturnT作为bool,但要做到这一点,它需

c++ - 函数 "int (*function())[10];"是什么意思?

我看了一段代码,发现有这样的函数。int(*function())[10]{...}我很困惑。这个函数是什么意思,它会返回什么? 最佳答案 它是一个函数的定义,它返回一个指向10个整数数组的指针。请记住,返回值是一个指针,而不是一个实际的数组。数组不能从函数返回。根据标准第8.3.5/8段:Functionsshallnothaveareturntypeoftypearrayorfunction,althoughtheymayhaveareturntypeoftypepointerorreferencetosuchthings这里有

c++ - 是否可以允许一种 std::function 类型接受具有不同签名的 lambda

我有一个高阶函数map类似于STLfor_each,并映射一个std::functionvector上的对象的东西。templatevectormap(functionf,vectorxs){vectorret;for(auto&x:xs)ret.push_back(f(x));returnret;}现在,我想让这个高阶函数同时获取function&)>类型的两个对象和function)>,如随附的最小示例所示。问题是function&)>和function)>似乎可以相互转换(见head和head2),但map不会采用const引用版本function&)>(见Q1)。可以告诉map

C++ 试图从 std::function 获取函数地址

我正在尝试从std::function中查找函数的地址。第一个解决方案是:size_tgetAddress(std::functionfunction){typedefvoid(fnType)(void);fnType**fnPointer=function.target();return(size_t)*fnPointer;}但这仅适用于具有(void())签名的函数,因为我需要该函数签名是(void(Type&)),我试着做templatesize_tgetAddress(std::functionfunction){typedefvoid(fnType)(T&);fnType**

c++ - 模板化线性代数 vector 类中出现奇怪的 "Member function not viable"错误

我正在实现一个模板化vector类(不是数据容器,而是线性代数意义上的vector),每当我引用rhs时都会遇到很多错误。在我的运算符重载中。另外,我的复制构造函数似乎不起作用。#ifndef__VecXd__VecXd__#define__VecXd__VecXd__#defineULLunsignedlonglong#includeusingnamespacestd;templateclassVecXd{public:explicitVecXd(ULLnewDimension=1){dimension=newDimension;vector=newT[newDimension];}

c++ - std::function 的目的是什么以及如何使用它?

我必须使用std::function但我不知道下面的语法是什么意思。std::functionf_name=[](){FNAME();};使用std::function的目的是什么?是做一个函数的指针吗? 最佳答案 std::function是一个类型删除对象。这意味着它删除了一些操作如何发生的细节,并为它们提供了一个统一的运行时接口(interface)。对于std::function,主要的1操作是复制/移动、销毁和“调用”,operator()--'函数如调用运算符'。在不太深奥的英语中,这意味着std::function几乎

c++ - 有什么方法可以获取 "current function"的返回类型

我想编写一个模板,该模板将获取实例化函数的返回类型作为参数。例如,假设我有一个Result模板类:templateclassResult{T_result_value;T&operator=(Tthat);~Result();}这个类(class)会有几个专业。在析构函数中,我想记录返回类型,并且在operator=中分配我想检查并断言错误值。理想情况下,我希望能够有这样的定义:#defineRESULTResult所以我可以使用它:HFILEMyOpenFile(...){RESULTresult;}...将推导出为Result.这是一个简化的例子:写RESULT而不是Result没

c++ - std::function 作为回调,是否可以注销?

这个问题完全是关于std::function而不是boost::function.有关详细信息,请参阅此问题底部的更新部分,尤其是关于无法比较非空std::function的部分符合C++11标准的对象。C++11std::function类模板非常适合维护回调集合。可以将它们存储在vector,例如并在需要时调用它们。然而,维护这些对象并允许注销似乎是不可能的。让我具体一点,想象一下这个类:classInvoker{public:voidRegister(std::functionf);voidUnregister(std::functionf);voidInvokeAll();pr

c++ - 在被调用函数中更改函数指针(std::function)是否安全?

我有一个std::function指向一个函数。在这个函数中,我将指针更改为另一个函数。std::functionfun;voidfoo(){std::cout我看不出有任何问题,而且效果很好(见here),但是我不确定这样做是否合法。有什么我想念的吗?可能在c++标准草案中(我很快查了一下,但到目前为止什么也没看到)。 最佳答案 这对于函数指针是合法的。当您使用目标分配或构造std::function时,它会创建目标的拷贝。在将函数分配给std::function的情况下,this实际上将函数指针存储为目标对象。当您调用opera

C++ std::function 找不到正确的重载

考虑以下情况:voidSet(conststd::function&fn);voidSet(conststd::function&fn);现在调用函数Set([](inta){//...});给出“对重载函数的模糊调用”错误。我正在使用VisualStudio2010。是否有解决方法或其他方法来实现类似的功能。我不能使用模板,因为这些函数被存储以供以后使用,因为在这种情况下我无法确定参数的数量。如果你问我可以提交更多细节。 最佳答案 我会建议这个解决方案。它应该与lambdas以及函数对象一起使用。它可以扩展以使其也适用于函数指针(