草庐IT

c++ - 独立于模板参数位置的专用模板分派(dispatch)

我遇到过需要一个模板函数的问题,只要它的模板参数相同且与位置无关,它就会具有相同的输出。假设总是有两个参数。我有一个函数:templateintfunc();我想要func()和func()调用相同的代码。我想到了一个我想避免使用的宏,但我需要在两种类型相同时不要重复代码。所以一个宏,例如:#defineDEF_TEMPL_IMPL(lhs,rhs,ret)\template\autofunc(){returnret;}\template\autofunc(){returnfunc();}编译失败因为DEF_TEMPL_IMPL(float,float,3)会导致重新定义func我认为

c++ - 调用子覆盖时始终调用父类(super class)虚函数

我有这样的结构:classA{public:virtualvoidfunc(inta){cout现在,在95%的情况下,当我从A继承时,我会覆盖func,在100%的情况下,我应该在执行任何其他操作之前调用A::func();?我怎样才能防止手动编写这个。有时我什至忘记在子类中调用A::func();并得到运行时错误、抛出等。 最佳答案 NVIpattern怎么样??classA{public:voidfunc(inta){cout 关于c++-调用子覆盖时始终调用父类(supercla

c++ - Superclass::method 或 this-> 方法之间的区别

如何以及何时调用父类(superclass)方法?两个选项请引用代码段:classSuperClass{public:voidmethod();};classSubClass:publicSuperClass{public:voidsomeOtherMethdo(){this->method();SuperClass::method();}}; 最佳答案 使用this->method()调用一个函数,该函数要么在您的父类(superclass)中实现,要么由您自己的类实现。当使用superClass::method()时,您一定要调

c++ - 虚函数对象切片

我的问题是引用thisquestion这解释了虚函数在对象切片的情况下如何工作,最终调用基类虚函数和Wikipediaarticle这解释了下面代码的派生类的虚拟表布局classA{public:virtualvoidfunc(){cout以上程序输出“InA::func”。但是如果B类的虚表不知道基类A::func怎么会最终调用A::func 最佳答案 AoA=*ptr1;这会将任何成员变量复制到一个新的A对象中。vtable指针不是普通成员变量,不会被复制。因此,针对此对象调用的任何后续虚函数都将作为A对象,因为它是A对象。

c++ - SFINAE 方法比较

以下代码显示了一个SFINAE实现,用于在编译时检查类型(基本上是类)是否包含成员函数member_func。#defineCHECKER(func_name,class_name)sizeof(class_name::templatefunc_name(0))==1#includestructA{voidmember_func();};structB{};templatestructCheck_If_T_Is_Class_Type{templatestaticcharfunc(charC::*p);templatestaticlongfunc(...);enum{val=CHECKE

c++ - g++ 无法解析模板函数重载

对于以下代码,g++失败:templateinlinevoidfunc(constT&,R...){}templatestructS{};templateinlinevoidfunc(constS&,R...){}intmain(){func(42);func(S());//OKfunc(S(),1);//NOKfunc(S(),1);//NOK}与::Infunction'intmain()'::13:21:error:callofoverloaded'func(S,int)'isambiguousfunc(S(),1);//NOK^:13:21:note:candidatesare

c++ - 重载解析和显式模板参数

以下代码prints"func2".为什么编译器将第二个模板视为更好的匹配,存在显式(未推导出的)模板参数?为什么没有歧义?如果引用C++标准,我将不胜感激。#includetemplatestructidentity{typedefTtype;};templatevoidfunc(T){std::coutvoidfunc(typenameidentity::type){std::cout(1);} 最佳答案 两个候选人都是可行的并且采用相同的参数,因此重载解决过程回退到最后一个决胜局:函数模板的偏序[temp.func.order

c++ - 如何获取另一个函数的 __LINE__ 值(在调用该函数之前)?

对于当前存在的测试框架,我需要将(在第一次调用期间)传递给该函数内部片段的行号。是这样的:#includevoidfunc(intline_num){#defineLINE_NUM(__LINE__+1)if(line_num==__LINE__)//Checkthepassedargagainstthecurrentline.printf("OK");elseprintf("FAIL");}intmain(void){func(LINE_NUM);//Passtothefuncthelinenumberinsideofthatfunc.return0;}(这是更复杂功能的简约版本)。

c++ - 模板:只有在类有方法时才执行

我想编写一个函数来执行某个模板类的方法,但如果该类没有它,也应该可以正常编译。在那种情况下,它不应该调用该函数。structA{voidfunc(){}};structB{};templatevoidanotherFunc(Tt){//dot.func()hereifTimplementsfunc,justdonothingifitdoesn't.}这有可能吗? 最佳答案 //type_sinktakesatype,anddiscardsit.type_sink_tisaC++1ystyleusingaliasforittempla

c++ - LLVM/Clang 是否支持弱链接的 'weak' 属性?

简而言之:LLVM/Clang是否支持“弱”属性?我正在学习一些Arduino库源代码(更详细的是HardwareSerial.cpp),我发现了一些以前从未使用过的有趣属性weak:#ifdefined(HAVE_HWSERIAL0)voidserialEvent()__attribute__((weak));boolSerial0_available()__attribute__((weak));#endif我发现它很有趣,而且我读到如果未定义,链接器应将其设置为NULL。但是,在我使用Clang进行的测试中,我无法使用它。文件lib.cpp:#include"lib.h"#inc