草庐IT

overloading

全部标签

c++ - 编译器如何传递 `std::initializer_list` 值? (或 : how can I get around a universal overload with one? )

Continuingmysaga,我意识到我可以使用单个std::initializer_list参数来重载我的访问函数:classarray_md{//...my_type&operator[](size_typei){/*Lotsofcode*/}my_typeconst&operator[](size_typei)const{/*sameLotsofcode,with"const"sprinkledin*/}my_type&operator[](std::initializer_listi){/*Lotsofdifferentcode*/}my_typeconst&operato

c++ - 模板成员函数重载问题

N4296::13.1/2.2[over.load]的标准说:Likewise,memberfunctiontemplatedeclarationswiththesamename,thesameparameter-type-list,andthesametemplateparameterlistscannotbeoverloadedifanyofthemisastaticmemberfunctiontemplatedeclaration.所以,我认为下面的程序是病式的:#includestructA{templatestaticvoidfoo(){}templatestaticintf

C++11 "overloaded lambda"带有可变参数模板和变量捕获

我正在研究一个可能被称为“重载lambda”的C++11习语:http://cpptruths.blogspot.com/2014/05/fun-with-lambdas-c14-style-part-2.htmlhttp://martinecker.com/martincodes/lambda-expression-overloading/使用可变参数模板重载n函数似乎对我很有吸引力,但事实证明它不适用于变量捕获:[&]中的任何一个|[=][y][&y](和[this]等,如果在成员函数中)导致编译失败:error:nomatchforcallto'(overload,main(in

c++ - 基于非类型模板参数的重载

我们熟悉基于函数参数的重载。但是为什么我们不能基于非类型模板参数进行重载呢?有了这样的重载,您就不必为了重载目的而添加额外的函数参数,这可能会对运行时性能产生负面影响。唉,下面的代码无法编译:templatevoidfunc(){}templatevoidfunc(){}intmain(){func();}产生的错误信息是error:callofoverloaded'func()'isambiguousfunc();^note:candidate:voidfunc()[withbool=false]voidfunc(){}^note:candidate:voidfunc()[withi

C++ 对重载函数的模糊调用

我有以下用于“安全”strncpy()的代码——基本上它的包装器自动为字符串缓冲区采用固定的数组大小,因此您不必做额外的工作来传递它们(而且这种便利性更安全因为您不会不小心输入错误的固定数组缓冲区大小)。inlinevoidMySafeStrncpy(char*strDest,size_tmaxsize,constchar*strSource){if(maxsize){maxsize--;strncpy(strDest,strSource,maxsize);strDest[maxsize]=0;}}inlinevoidMySafeStrncpy(char*strDest,size_tm

c++ - 错误 : no instance of overloaded function

我正在尝试使用以下代码在我的数据库(SQLServer2008)中插入一些行:CDB.cpp#include"CDB.h"voidCDB::ajouterAlerte(){SqlConnection^mySQLConnection;SqlDataAdapter^myDataAdapter;DataSet^myDataSet;DataRow^myRow;SqlParameter^myParameter;try{mySQLConnection=gcnewSqlConnection("DataSource=NECTARYS-PC;InitialCatalog=MonitoringN;Inte

c++ - 使用未知指针类型调用函数重载

所以,我有一个基类PhysicsObject,子类Colliding,以及再次从中派生的两个类,Static和Newtonian.检查碰撞时,我将所有碰撞写入std::vector>collisionVector.(碰撞检测是相当基础的,它并不是问题的真正一部分。)现在,在检测到所有碰撞后,我遍历collisionVector并调用静态collide方法,它具有以下四个重载:voidcollide(Newtonian*first,Newtonian*second);voidcollide(Newtonian*object,Static*obstacle);inlinevoidcolli

c++ - 将函数注入(inject)子类

是否可以在C++14中做这样的事情。我有一个基类如下:#includeclassAbstractElement;classConcreteElement;classSuperConcreteElement;classB{public:voidbar(AbstractElement*){std::coutfoo();//PrintsConcreteelement}正如您在//1和//2中看到的,函数的主体完全相似。但是我不能完全将它移动到基类中,因为取决于this的静态类型。尽管如此,每次我需要添加AbstractElement的子类时,我都不想编写完全相同的代码。因此,我需要某种机制来

c++ - C++ 中用于自动将对象转换为 "printable"格式的重载歧义

我正在尝试编写一个接受输入的函数。如果该输入可以直接通过管道传输到流(例如使用std::cout),它会原封不动地返回输入。否则,它会尝试将输入转换为字符串,并返回该字符串。我有以下代码://UsesSFINAEtodeterminewhichoverloadtocall//See:https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error//Basically,make_printabledetectswhetheranobjectcanbedirectlypipedtoastream.//Ifitcan'tb

c++ - 重载 typedef 参数

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Overloadingmembermethodswithtypedefaliasesasparameters我有以下方法voidsetField(charx);和另一个重载方法voidsetField(int8_tx);这会在除solaris以外的所有平台上编译,在solaris上int8_t是typedefaschar有什么办法可以解决这个问题,因为我不想更改方法的名称我收到编译器错误提示methodalreadyexists