草庐IT

T_OLD_FUNCTION

全部标签

c++ - __PRETTY_FUNCTION__ 在常量表达式中

请引用这段代码:#include#includeconstexprstd::size_tstrlen(charconst*s){std::size_tn=0;while(*s++!='\0')++n;returnn;}templatestructX{};intmain(){constexprautopf=__PRETTY_FUNCTION__;//gccok;clangok;(1)static_assert(std::string_view(__PRETTY_FUNCTION__)==std::string_view("intmain()"));//gccok;clangok;(2)X

c++ - 优化的 argmin : an effective way to find an item minimizing a function

假设我有一个项目集合和对它们的评分函数:structItem{/*somedata*/};std::vectoritems;doublescore(Item);我想从该集合中找到分数最低的项目。一个简单的写法是:constautoargmin=std::min_element(begin(items),end(items),[](Itema,Itemb){returnscore(a)但如果score是一个计算量很大的函数,std::min_element的事实实际上在某些项目上多次调用它可能令人担忧。这是预料之中的,因为编译器无法猜测score是purefunction.我如何找到ar

c++ - 转换函数是否返回 void "old-style-cast"?

Coverity提示我们代码库中的各种函数调用没有检查返回值。Uncheckedreturnvalue(CHECKED_RETURN)3.check_return:CallingAppendwithoutcheckingreturnvalue(asisdoneelsewhere73outof78times).在过去,我们会通过将返回值转换为void(如讨论的here)来简单地解决这个问题(在仔细检查返回值确实不重要之后):(void)Foo.Append(bar);但是,我们正朝着启用所有警告的方向努力,并且将警告视为错误,所以我有点担心上面的代码会生成一个old-style-cast

c++ - 使用 std::function 和 std::bind 来存储回调和处理对象删除。

我想实现一个管理器,它使用C++11存储对多态类成员函数的回调。问题是我不确定如何处理成员所属的对象被删除或应该被删除的情况,我希望使界面尽可能简单。所以我想到了以下内容:将std::weak_ptr存储到对象,将std::function存储到成员。以下似乎有效:classMyBase{public:MyBase(){}virtual~MyBase(){}};//--------------------------------------------------classMyClass:publicMyBase{public:MyClass():MyBase(){}voidmyDou

c++ - 禁用 "bad function cast"警告

我收到以下警告:warning:convertingfrom'void(MyClass::*)(byte)'to'void(*)(byte)'这是因为我需要将成员函数而不是普通函数作为参数传递。但是程序运行正常。我想禁用此警告(Wno-bad-function-cast不适用于C++)或实现一种不同的方式来传递成员函数。 最佳答案 否。请认真对待此警告。您应该更改代码来处理这种情况。指向成员函数的指针(void(MyClass::*)(byte))和普通函数指针(void(*)(byte))是完全不同的。Seethislink.你不

c++ - 如何 : c++ Function Pointer with default values

我有:typedefvoid(*RespExtractor)(constcv::Mat&image,cv::Mat&resp);virtualvoidpredict_image(constcv::Mat&src,cv::Mat&img_detect,cv::Sizepatch_size,RespExtractor);voidcreate_hough_features(constcv::Mat&image,cv::Mat&resp,FeatureParams¶ms=FeatureParams());我将如何定义RespExtractor以接受具有默认参数的函数,这样我可以调用:p

c++ - 错误 C2280 : attempting to reference a deleted function

我是游戏开发的新手,也是C++的新手,但我已经开始开发一款打砖block小游戏。我以前让它运行过,但在重构(引入ArkanoidGame类)后它无法编译,我也不知道为什么。我得到的错误是:d:\dropbox\development\gamedev\c++\arkanoid\arkanoid\main.cpp(14):errorC2280:'ArkanoidGame::ArkanoidGame(void)':attemptingtoreferenceadeletedfunctiond:\dropbox\development\gamedev\c++\arkanoid\arkanoid\

c++ - 如何使用 std::function<void(void)> 调用方法

我正在尝试使用一种方法std::function作为输入。不幸的是,我以前从未使用过这种数据类型,而且我在理解它时遇到了问题。我需要做的就是在它被调用时说出执行一个方法,例如:std::functiondoThing=object.isMethod();虽然这个语法显然是不正确的。有人可以向我解释一下吗? 最佳答案 你可以bind方法的对象std::functiondoThing=std::bind(&type::isMethod,&object);或使用lambdastd::functiondoThing=[&]{object.i

C++ 虚函数 : Can the linker remove entries in the virtual function table which aren't called?

这个问题是对eliminateunusedvirtualfunctions的一种跟进,这对我的兴趣来说还不够深入。问题:在定义具有虚函数的类时,编译器为虚函数表分配存储空间,并在表中存储指向函数的指针。这会导致链接器保留这些函数的代码,而不管它们是否被调用过。这可能会导致大量死代码保留在可执行文件中,即使编译器优化设置要求消除死代码也是如此。现在,如果在可执行文件中没有任何地方有特定虚函数的调用(或者换句话说,访问虚函数表的相应槽),则可以从虚函数中省略相应的函数指针表,链接器将删除该函数的代码,并可能进一步省略其他未引用的代码。显然,这不能由编译器完成,因为只有在链接时才会清楚是否调

c++ - 重载 std::function 参数以匹配 lambda

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Disambiguatingcallstofunctionstakingstd::functionsIsn'tthetemplateargument(thesignature)ofstd::functionpartofitstype?我想重载一个函数,以便可以使用各种不同的lambda自然地调用它(通常有更多或更少的参数)。我尝试过的显而易见的事情是:#include#includeexternvoidfn(std::function);externvoidfn(std::function);voidtest