草庐IT

weak-template-vtables

全部标签

c++ - Clang (OS X) 在特定的嵌套声明中需要 "template"关键字,而 VS 禁止它

我正在使用两个编译器(Xcodev5.0.2上的Clang和VisualStudio2012Update4)编写一个跨平台应用程序,我遇到了两个编译器不同意使用所需语法的场景嵌套声明中的template关键字。这是代码(归结为一个易于重现的测试用例):templatestructBase{templatestructInnerBase{};};templatestructDerived:publicBase{//the"template"keywordisREQUIREDinClang/OSXstructInnerDerived:publicBase::templateInnerBas

c++ - 为什么找不到用命名空间中定义的类型实例化的 std::weak_ptr 的重载运算符==?

我使用的是VisualStudio2015。知道为什么这段代码可以编译:#includeclassFoo;classBar;typedefstd::pair>Object;typedefstd::vectorObjectVect;booloperator==(std::weak_ptrleft,std::weak_ptrright){returnleft.lock()==right.lock();}intmain(intargc,char*argv[]){ObjectVectvect;Objectobj;autofoundIter=std::find(vect.begin(),vect

c++ - "template"关键字之前的 "class"关键字在做什么?

只是一些代码示例[不是现实生活中的例子]//atfilescopetemplatestructdemo{};templateclassdemo;//isthetemplatekeywordoptionalhere?第3行中的模板关键字是可选的吗?我以前没有(经常)看到模板关键字的这种用法。标准的哪一部分说允许这样做?编辑我认为g++有一个错误。templatestructdemo{};classdemo;//templatekeywordomitted在g++(4.5.1)上编译而在Comeau上失败"ComeauTest.c",line5:error:specializingclas

c++ - 没有参数的模板类 `template<>` 是什么意思?

没有参数的模板类是什么意思?例如,让我们以计算阶乘的模板类为例,其模板参数为N-N!。.基本上,这是类:templateclassFactorial{public:enum{fact=N*Factorial::fact};};但是,我发现这个类有一个“扩展类”,templateclassFactorial{public:enum{fact=1};};我的问题是:没有参数的模板是什么,template什么意思?提前致谢。 最佳答案 这个templateclassFactorial{public:enum{fact=1};};实际上是类

c++ - 为什么这有效(Templates,SFINAE)。 C++

关于昨天的帖子,今天早上这把我吵醒了。为什么这真的有效?就test这个函数而言,这个函数没有主体,怎么能执行任何操作呢?我想知道为什么以及如何工作?我真的很想知道您的答案。templateclassIsClassT{private:typedefcharOne;typedefstruct{chara[2];}Two;templatestaticOnetest(intC::*);//NOBODYHEREtemplatestaticTwotest(…);//NORHEREpublic:enum{Yes=sizeof(IsClassT::templatetest(0))==sizeof(On

c++ - 提升 : dereference a template argument if it's a pointer

如果它是一个指针(或智能指针),我可以使用什么来取消引用模板参数,或者如果它不是,我可以保持原样吗?templatevoidsubf(constT&item){item.foo();}templatevoidf(constT&item){subf(magic_dereference_function(item));}Boost中的任何内容都是一个选项。 最佳答案 templateT&maybe_deref(T&x){returnx;}templateT&maybe_deref(T*x){return*x;}您必须单独为智能指针添加重

c++ - "use of class template requires template argument list"是什么意思?

我是模板的新手,所以请原谅我的幼稚问题。我在这段代码中遇到错误:templateclassa{public:inti;a(t&ii):i(ii){}};intmain(){a*a1(newa(3));cout编译错误:'a':使用类模板需要模板参数列表'a':类没有构造函数 最佳答案 使用a*a1(newa(3));^^^^^^^^^如果你想让你的模板参数被自动推导,你可以使用一个辅助函数:templatea*createA(constT&arg)//pleaseaddconsttoyourctor,too.{returnnewa(

c++ - 如何使用 vtable 确定类类型

我最近参加了一个职位的面试,其中C/C++是主要语言,在一个问题中,我被告知可以使用vtable来确定基指针实际存储在层次结构中的哪个类。所以,例如,如果你有classA{public:A(){}virtual~A(){}virtualvoidmethod1(){}};classB:publicA{public:B(){}virtual~B(){}virtualvoidmethod1(){}};然后你实例化A*pFoo=newB(),是否真的可以使用虚函数表来确定pFoo是否包含指向A或B实例的指针? 最佳答案 这显然是依赖于实现的

c++ - 为什么我们必须做 template <class/typename> T 而不仅仅是 template T

代替templatevoidfunc(Targ){/*something*/}为什么我们做不到templatevoidfunc(Targ){/*something*/}来自cplusplus.com:Theonlydifferencebetweenbothprototypesistheuseofeitherthekeywordclassorthekeywordtypename.Itsuseisindistinct,sincebothexpressionshaveexactlythesamemeaningandbehaveexactlythesameway.对我来说,这似乎是不必要的样板

c++ - 我可以在这里使用 Curiously Recurring Template Pattern (C++) 吗?

我有一个C++应用程序,可以简化为如下所示:classAbstractWidget{public:virtual~AbstractWidget(){}virtualvoidfoo(){}virtualvoidbar(){}//(othervirtualmethods)};classWidgetCollection{private:vectorwidgets;public:voidaddWidget(AbstractWidget*widget){widgets.push_back(widget);}voidfooAll(){for(unsignedinti=0;ifoo();}}void