草庐IT

Templates

全部标签

c++ - 使用 GDB 进入模板类

我正致力于用C++实现平衡树,但作业的要求是我必须使用模板类。我想先用int做,然后再转换成模板,但是给我们的测试代码默认使用模板。当我使用g++class.htest.cxx-Wall-g-O0编译我的代码时,一切似乎都工作正常,直到我进入gdb,它不会进入模板实现。我的模板实现文件包含在头文件的末尾,gdb允许我在其中设置断点,但它从未真正进入函数。我一直在通过emacs使用gdb,但它也不能直接在gdb中工作。我希望当GDB到达在那里实现的函数时,该步骤会切换到模板文件,但它告诉我它认为它应该去的那一行并不真正存在。这是一个典型的session:(gdb)breakset.tem

c++ - MFC 中的抽象基类是否需要 DECLARE_DYNAMIC?

我有一个派生自MFCCView类和模板化类的基类,例如;templateclassCMytViewT:publicCView,publicCMyTemplateClassT{DECLARE_DYNCREATE(CMyViewT)private:CMyViewT();'''}IMPLEMENT_DYNCREATE(CMyViewT,CView)现在我猜测MFC宏会被模板打乱,并且正在考虑删除此类的动态创建宏,并为模板的每个特化重新引入它。例如templateclassCMytViewT:publicCView,publicCMyTemplateClassT{public:CMyViewT

c++ - 右值引用模板推导

templatevoidf(U&&v){std::cout::value){std::cout(int(1));}}intmain(){f(int(1));f(int(1));std::cin.ignore();}为什么v参数被解释为int当我没有明确使用f时?有什么不同?(用MVS2010编译)我的猜测是,First作为右值传递,second作为右值引用传递,并且都正确绑定(bind)到右值引用,对吗?谢谢。 最佳答案 不,不是真的。永远不会推导出右值引用。U&&的概念U是可推导的模板参数,用于指示U应该被推导,使得参数的右值是保

c++ - 使用枚举来专门化模板

我一直在使用带有枚举参数的模板来为我的代码输出提供专门的方法。templatestructsensorOutput;templatestructsensorOutput{voidsetData(Objects&objs){//outputspecifictoDEVICE1//outputvelocityobjs.set(VELOCITY,vel[Device::DEVICE1]);//outputpositionobjs.set(POSITION,pos[Device::DEVICE1]);}};templatestructsensorOutput{voidsetData(){//ou

c++ - 如何根据标记的参数包调用一组可 rebase 类构造函数?

我希望能够做到这一点:templatestructA{A(inti){}};templatestructB{B(){}B(constchar*){}};templateclass...Mixins>structMix:Mixins>...{//Thisworks,butforcesconstructorstotaketuplestemplateMix(Packs...packs):Packs::Type(packs.constructorArgs)...{}};templateclassMixinType,typename...Args>structArgPack{typedefMix

c++ - 模板类中的静态函数

我正在尝试在模板中创建一种工厂类。我想做一些类似于纯虚函数的事情,但它需要是静态的,因为我正在使用该函数来创建类型。我想要发生的是当我声明一个类时,模板调用静态函数。静态函数实际上是在模板化类中声明的。我已经做到了:classBase{};templateclassType:publicBase{public:staticvoidCreate(){mBase=CreateBase();}private:staticBase*CreateBase();staticBase*mBase;};classMyType:publicType{private:staticBase*CreateBa

c++ - 函数对象方法对函数指针安全吗?

我正在编写一个大量使用柯里化(Currying)对象和模板的项目。新decltypec++11的特性意味着我可以开始接受没有明确定义返回类型的函数对象作为我的函数对象的curry。相反,可以使用元函数提取返回类型,例如:templatestructunary_result{typedeftypenamestd::remove_reference::type>::typetype;};给定一个函数对象:structfoo{intoperator()(double)const;};(它不继承自std::unary_function或定义它的result_type),我可以将它作为unary

C++ 函数模板导致输入参数出错

我如何创建一个在自身内部使用模板但不在其参数中使用模板的函数?我有很多具有相同构造函数和函数的类,但在它们的构造函数中做不同的事情,所以我试图创建一个可以接受数字的函数(这是必要的)来告诉开关模板值应该成为哪个函数.我应该怎么做?将模板放在函数中而不是模板化函数本身也不起作用this不工作#includetemplatevoidfunction(uint8_ts,std::stringstr1,std::stringstr2,std::stringstr3){Tvar;switch(s){case1://var=class1();break;//case2...//case3...de

c++ - 如何将模板类容器的迭代器传递给函数?

这是James对这个问题的回答的后续:Flatteningiterator我尝试更改James的解决方案,以便它可以处理模板类。原来我在调用函数时卡住了(那里是“flatten”,这里是“foo”)。当我专门针对每个模板参数时它会起作用,这是可能的,因为只会出现三个(1,2,3)。一般情况不编译。请参阅下面的代码和gcc的错误消息。#include#includetemplateclassA{};templatevoidfoo(typenamestd::vector>::iteratorfirst,typenamestd::vector>::iteratorlast){}//voidf

c++ - 如何专门化模板函数以让它接受将 char 数组作为参数传递?

//problem.cpp:#includetemplatevoidfunc(constT&v);intmain(){inti;floatf;char*cp;charca[4];func(i);func(f);func(cp);func(std::string("std::string"));func(ca);func("string_literal");return0;}//problem2.cpp#includetemplatevoidfunc(constT&v);//undefinedreferenceto`voidfunc(intconst&)'templatevoidfunc