草庐IT

override_function

全部标签

c++ - 虚拟继承 : Error: no unique final overrider

我知道在问这个问题之前和之前这里已经介绍了虚拟继承,我浏览了虚拟继承的详细信息,并浏览了类似问题的详细信息,如下所示:multiple-diamond-inheritance-compiles-without-virtual-but-doesnt-with和whydoesGCCgivemeanerror-finaloverrider我的问题略有不同,因为我没有使用纯虚函数,而是显式使用虚拟继承来拥有一个唯一的base类。层次结构如下:base/\/\der1der2\/der3我知道关于派生问题的可怕钻石,这就是我使用虚拟继承的原因。#includeclassbase{public:b

C++ : Extern C Functions inside a Namespace

我必须链接两个库,比如A和B。其中一些文件在两个库中是通用的。所以,我在命名空间内的库A中声明函数,比如abc。因此,在A和B中,函数func如下所示:[inA]namespaceabc{extern"C"voidfunc();}[inB]extern"C"voidfunc();在构建项目时,编译器会抛出链接错误,说明函数func的多个定义。是不是命名空间内的A中的函数func或者外部“C”函数是否存在问题。如果有,那么我该如何区分它们呢? 最佳答案 当您使用Extern"C"时,您将关闭名称修饰,因此您会丢失命名空间信息,因为C没

c++ - C++ 中的 AI 应用程序 : How coSTLy are virtual functions? 有哪些可能的优化?

在我用C++编写的AI应用程序中,没有太多的数值计算有很多结构需要运行时多态性在计算过程中,多个多态结构经常会相互作用在这种情况下,有没有什么优化技术?虽然我现在不关心优化应用程序,但为项目选择C++而不是Java的一个方面是能够更多地利用优化和能够使用非面向对象的方法(模板、过程、重载)。具体来说,与虚函数相关的优化技术有哪些?虚函数是通过内存中的虚表实现的。有没有办法将这些虚拟表预取到二级缓存(从内存/二级缓存中获取的成本正在增加)?除此之外,C++中的数据局部性技术是否有很好的引用资料?这些技术将减少计算所需的数据提取到L2缓存的等待时间。更新:另见以下相关论坛:Performa

c++ - 如何在 Visual Studio 11 中将成员函数直接绑定(bind)到 std::function?

我可以轻松地将成员函数绑定(bind)到std::function,方法是使用带有捕获子句的lambda表达式包装它们。classClass{Class(){Register([=](intn){Function(n);});}voidRegister(std::functionCallback){}voidFunction(intNumber){}};但我想直接绑定(bind)它们,如下所示。//...Register(&Class::Function);//...我觉得按照C++11的标准,这个应该是支持的。但是,在VisualStudio11中,我得到了这些编译器错误。error

c++ - `std::function` 是否允许移动其参数?

在处理thisquestion时,我注意到GCC(v4.7)的std::function实现在参数被取值时会移动它的参数。以下代码显示了这种行为:#include#includestructCopyableMovable{CopyableMovable(){std::coutbyValue;byValuefooByValue=foo;CopyableMovablecm;fooByValue(cm);}//outputs:defaultcopymovemove我们在这里看到执行了cm的拷贝(这似乎是合理的,因为byValue的参数是按值获取的),但随后有两个Action。由于functi

c++ - 递归 typedef 函数定义:std::function 返回自己的类型

我正在尝试实现状态机。状态由callback_t类型的函数表示:callback_t(int&)返回相同类型的函数。我不知道如何实现它,因为似乎不允许递归类型函数。这是我尝试过的(作为玩具):#include#includetypedefstd::functioncallback_t;callback_tf1(int&i){i++;returnf1;}callback_tf0(int&i){if(i==0)i++;returnf1;}callback_tstart(int&i){i=0;returnf0;}intmain(intargc,char**argv){callback_tbe

c++ - 为什么我不能将 [](auto&&...){} 转换为 std::function<void()>?

当我尝试编译时:#includevoidf(std::functionf){}voidg(){f([](auto&&...){});}在gcc7.3上,我收到以下错误:[x86-64gcc7.3#1]error:couldnotconvert'g()::{}'from'g()::'to'std::function'有人可以解释为什么这是无效的c++吗?还是我应该提交错误报告?(MSVC14接受并将其编译为我所期望的。) 最佳答案 这是gccbug.它将您的lambda解释如下:[](auto&&,...){}所以有一个参数,然后是C

c++ - 为什么 std::function 不能绑定(bind)到 C 风格的可变参数函数?

比如这个编译失败:std::functionmy_printf(printf);使用gcc,错误信息如下:error:variable'std::functionmy_printf'hasinitializerbutincompletetypestd::functionmy_printf(printf);起初我认为这是gcc中的一个错误,但后来我查看了标准,似乎不支持这个。这是什么技术原因? 最佳答案 问题是实现之一。假设这是可能的。然后std::function必须声明(在printf的情况下)intoperator()(char

c++ - 为什么 std::function::argument_type 已被弃用?

我在cppreference上见过std::function::argument_type在C++17中已被弃用。背后的原因是什么?什么ISOWG21论文提出了这个建议? 最佳答案 相关论文是P0005R4(这是被投票纳入标准草案的论文)和P0090R0(由P0005R4引用)。来自P0090R0的报价:Q2.What'swrongwithresult_type,etc.?A2.TheseC++98/03/TR1-eratypedefspredateddecltypeandperfectforwarding.Previously,g

c++ - 智能感知 : the object has type qualifiers that are not compatible with the member function

我有一个名为Person的类:classPerson{stringname;longscore;public:Person(stringname="",longscore=0);voidsetName(stringname);voidsetScore(longscore);stringgetName();longgetScore();};在另一个类(class),我有这个方法:voidprint()const{for(inti=0;i这是人的声明:staticconstintsize=8;Personpeople[size];当我尝试编译它时,我得到了这个错误:IntelliSense