草庐IT

hash-function

全部标签

c++ - "Control reaches end on non-void function"with do { 返回结果; } 而(条件);

我有以下功能(简化示例):QByteArrayDecompressBytes(constQByteArray&content){/*functionbody(withotherreturnexpressions)*/do{returncontent;}while(content.size()!=0);}添加最后一行用于测试,替换使用的宏。VisualStudio没有发现此代码有问题,但g++生成了warning:controlreachesendofnon-voidfunction[-Wreturn-type]将最后一行更改为returncontent;删除警告。我的问题:为什么编译器

c++ - 如何通过 C API 传递带捕获的 std::function?

我有一个CAPI,它是一个用于在线程之间传递消息的队列。我想通过std::function通过它,但要做到这一点,我需要将其降级为固定长度的POD数据block。std::function将主要来自C++11lambda并将通过引用或复制捕获。我可以使用C队列两侧的堆。队列本身是一个FreeRTOS队列,并且是嵌入式的。有一些discussionaboutpassingC++ishthingsthroughthequeue在他们的论坛上。它主要是说如果它是POD或可以简单地构造就可以了。目前我正在路过struct{void(*fp)(void*);void*context;},并将其执

c++ - clang、std::function 和 -fno-rtti

我在Windows上通过clang-cl使用Clang5,在使用std::function-fno-rtti)时遇到问题.这是我无法编译的示例:#includevoidfoo(std::functionra2){}intmain(){autobar=[](){};foo(bar);returnEXIT_SUCCESS;}命令行:clang-cltest.cpp-Xclang-fno-rtti错误是:C:\ProgramFiles(x86)\MicrosoftVisualStudio\Preview\Community\VC\Tools\MSVC\14.13.26128\include\

c++ - 访问并调用 std::function 的变体

我正在使用std::variant存储std::function的不同签名秒。所述函数存储在vector中,后者从map中检索。如何调用vector中的每个函数std::variant?我觉得我应该使用std::visit但我不知道正确的用法。#include#include#include#include#includeusingvar_t=std::variant,std::function>;enumclassEventEnum{A,B,C};structController{templatevoidsubscribe(var_tfn){auto&callbacksVec=cal

c++ - Concurrent_hash_map 实现抛出 SIGSEGV

我正在尝试使用tbb的concurrent_hash_map来提高我的应用程序的并发性能。阅读它并根据我的应用程序实现它,但我看到崩溃..因此,我的应用程序是一个多线程应用程序,我在其中存储对,键是char*,值是整数。伪代码如下所示:在.h文件中,typedeftbb::concurrent_hash_maptbb_concurrent_hash;tbb_concurrent_hashconcurrent_hash_table;tbb_concurrent_hash::accessorwrite_lock;tbb_concurrent_hash::const_accessorread

c++ - std::hash 专门化我自己的类并在类中使用它

我定义了一个类Foo,并希望有一个采用std::unordered_set的公共(public)成员函数作为参数类型。能够使用std::unordered_set,我必须专攻std::hash在命名空间标准中。如果我不尝试使用std::unordered_set也没关系作为Foo中的参数类型成员函数。但是,一旦我想使用std::unordered_set作为Foo中的参数类型成员函数,我在定义特化时遇到问题std::hash.如果我在Foo之后做声明,Foo上有错误声明因为std::hash没有定义。一招std::hash之前的定义,它也不起作用,因为现在Foo未知。Foo的转发声明在

c++ - 将 lambda 传递给可变参数 std::function 时的类型推导

我正在尝试使用用于处理它们的函数的类型信息从数组元组中检索值。但是,由于(部分?)需要为std::function的类型名使用标识结构,因此在这种情况下类型推导失败。这里有没有办法恢复扣除?#include#include#includeclasscomp_a{public:staticconstsize_tid=0;intval=0;};classcomp_b{public:staticconstsize_tid=1;intval=0;};classcomp_c{public:staticconstsize_tid=2;intval=0;};templatestructstorage

c++ - 如果我使用 std::function 来捕获 lambda,我是否应该担心它被释放?

考虑以下代码,std::functionf=[](){};std::function*fp=newstd::function(f);每当程序离开这些行的上下文时(假设它们在函数内部被调用并且函数返回),f和fp的内存可能会在一些点。这很好,因为我只对fp感兴趣,而且我得到了它的拷贝。关键是有一个函数指针(fp),以后我可以随时调用它。所以,只要我不deletefp,问题就是:f是否会被释放,导致fp无效? 最佳答案 声明:std::function*fp=newstd::function(f);调用复制构造函数function(st

c++ - 从 lambda 构造 std::function 参数

我有以下模板化函数(编译器中启用了C++最新标准-但也许17就足够了)。#includetemplatevoidMyFunction(conststd::function&callback);intmain(){MyFunction(std::function([](int){}));MyFunction([](int){});}当我将它显式转换为std::function时,第一个调用编译通过,但第二个调用没有编译。在第一种情况下,模板推导是自动完成的,编译器只知道它应该将其转换为某个std::function并能够推导参数和返回类型。但是在第二种情况下,它应该(?)也知道lambd

c++ - 基类中的唯一指针禁止实例化,错误为 "attempting to reference a deleted function"

我将我的C++工具链从VisualStudio2013更新到VisualStudio2017/2019。现在我遇到了一些形式的编译错误:(13):errorC2280:'OfflineFixture::OfflineFixture(constOfflineFixture&)':attemptingtoreferenceadeletedfunction(8):note:compilerhasgenerated'OfflineFixture::OfflineFixture'here(8):note:'OfflineFixture::OfflineFixture(constOfflineFi