草庐IT

c++ - 在 C++ 中对带参数(字符串)的函数使用 std bind

我正在尝试在我的记录器类中创建一个std::functionsvector。当我尝试将方法绑定(bind)到我的std::function时:NcursesWindowlog_win("Logs",LINES-1,COLS/3,0,COLS*2/3);std::functionf=std::bind(&NcursesWindow::add_string,&log_win);add_string函数定义如下:voidadd_string(stringtext);但是,gcc(使用gfilt插件来尝试理解模板错误)返回:BDSoftwareSTLMessageDecryptorv3.10f

C++ 设置搜索对元素?

所以我有一组pairs我想使用find()搜索将在该对的“第一个”中的单个字符串,然后如果我在第一个中找到该字符串,我想从该函数返回第二个。我目前的尝试是..myList::iteratori;i=theList.find(make_pair(realName,"*"));returni->second; 最佳答案 C++11可以接受吗?autoit=find_if(theList.begin(),theList.end(),[&](constpair&val)->bool{returnval.first==realName;});

C++ 根据两个数据成员对对象进行排序

我知道您可以将用户定义的类插入到std::vector中然后重载排序机制,以便它在特定数据成员上进行比较。但是,您将如何对std::vector进行排序?其中MyClass有两个数据成员并且您想在第二个数据成员上添加“第二级”排序?所以对数据成员a进行排序在哪里a相等,则按数据成员b排序? 最佳答案 使用std::tuple创建自定义比较器#include//..structcomp{booloperator()(constMyClass&lhs,constMyClass&rhs)const{returnstd::tie(lhs.a

c++ - 打开简历;对 vector<Rect> 进行排序并删除某些条目

我有这个问题,我无法解决这个问题。我正在尝试检测和跟踪视频中的某些内容。因此,我使用了GaussianBlur()、threshold()、findContours()等函数。findContours()为我提供了一个等高线vector,该vector稍后会转换为边界矩形。到目前为止,一切都很好。我现在需要从带有边界矩形的vector中得到的是它们按大小(area)排序并且只包含未被另一个矩形包围的矩形。为了更好地理解,我试着画了一个小草图,clickhereforimage.所以我正在寻找的是#8是第一个条目,然后是#1,#3,....应删除#2、#4、#9、#10和#11等条目。我

C++11 auto、std::function 和对重载函数的模糊调用

我想知道是否有人知道为什么以下示例无法编译并给出对重载函数错误的模糊调用。如果我用强类型仿函数签名替换auto,它就能够正确区分两个方法重载。我注意到当不使用std::function作为我的重载参数时,不会发生同样的问题。如果我的重载只接受一个简单的float和int,即使使用auto关键字定义我的输入参数,编译器也可以正确区分这两个重载。我正在VisualStudio2012中编译它。这可能只是VS编译器中的错误吗?我现在无法访问装有GCC或Clang的机器,但有人知道这是否可以在那里编译吗?编译错误:对重载函数的调用不明确classAmbiguousOverload{public

c++ - 按类型对 std::vector 进行排序

我在看http://channel9.msdn.com/Events/GoingNative/2013/Writing-Quick-Code-in-Cpp-Quickly在第36分钟左右,他们讨论了如果您要对集合调用虚拟方法,则按元素类型对集合进行排序的好处。如此给定classBase{};classDer1:publicBase{};classDer2:publicBase{};classDer3:publicBase{};vectormyVector;如何对myVector进行排序,使每种类型的元素都是相邻的?有没有办法不使用虚函数来识别每个派生类型?(也许使用typeid?)

c++ - 在 C++11 循环范围内使用对指针的引用作为序列

以下两段代码之间的唯一区别是引用的使用。我理解为什么第一个代码片段无法编译,并且正在寻求帮助以了解为什么第二个代码片段可以编译。第一个片段:inta[2][3]={0,1,2,3,4,5};for(autorow:a)for(autocolumn:row)cout上面的代码无法通过编译,因为'row'的类型是指向int的指针,这不是一个序列。第二个片段:inta[2][3]={0,1,2,3,4,5};for(auto&row:a)for(autocolumn:row)cout此代码编译。如果我正确理解auto的工作原理,“行”是对指向int的指针的引用。但是为什么这个引用可以被看作一

c++ - 您将如何对函数的性能进行基准测试?

这可能是一个更高级的问题。如果您有两个返回值的函数,intF(intinput1,intinput2){intoutput;//returnoutput;}intD(intinput1,intinput2){intoutput;//returnoutput;}条件是F(a,b)==D(a,b)(对于相同的输入,两者都返回相同的值)。如果您想对他们的表现进行基准测试,您会怎么做?更准确地说,您将如何隔离执行F(a,b)或D(a,b)所花费的时间,使其不strong>反射(reflect)基准设置中其他辅助操作所花费的时间? 最佳答案

c++ - 检测对范围外变量的访问

Codelikethis是未定义的行为,因为它访问一个不再在范围内(其生命周期已结束)的局部变量。intmain(){int*a;{intb=42;a=&b;}printf("%d",*a);//UB!return0;}我的问题:是否有自动检测此类错误的好方法?它似乎应该是可检测的(当变量超出范围时将堆栈空间的一部分标记为不可用,然后如果该空间被访问则提示),但是Valgrind3.10、Clang4的AddressSanitizer和UndefinedBehaviorSanitizer,以及GCC6的AddressSanitizer和UndefinedBehaviorSanitize

c++ - 替换所有对 printf 的调用的宏

我想创建一个宏来替换对printf的所有调用,更具体地说是mbedtls_printf(其行为与printf完全相同)什么都没有。我知道我可以使用#definembedtls_printf将mbedtls_printf替换为空,但这仍然会使参数/括号保持不变。编辑-我忘了说mbedtls_printf是一个用sgx_printf替换自身的宏 最佳答案 我会选择:#defineprintf(...)(0)这里的好处是,如果有人真的费心检查printf的返回(很少见,但并非闻所未闻),它将继续编译。