草庐IT

template-specialization

全部标签

c++ - 满足条件的多种类型的模板类特化

如果我有一个模板类,像这样:templateclassType{/*...*/};在不以任何方式修改Type的情况下,是否有一种简单的方法可以针对所有匹配编译时条件的此类类型专门化它?例如,如果我想为所有整数类型专门化Type,我想做这样的事情(只有有效的事情,即):templateclassType,T>::type>{/*...*/}; 最佳答案 这应该有效:template::value>classType;//doesn'thavetobeaspecialization,althoughIthinkit'smoreclear

c++ - 了解 "template argument is invalid"错误消息

考虑代码:#include#includestructtest1{voidInvoke(){};};structtest2{templatevoidInvoke(){};};enumclassInvokableKind{NOT_INVOKABLE,INVOKABLE_FUNCTION,INVOKABLE_FUNCTION_TEMPLATE};templatestructget_invokable_kind{conststaticInvokableKindvalue=InvokableKind::NOT_INVOKABLE;};templatestructget_invokable_ki

c++ - 如何根据类型相关类型专门化 C++ 模板类函数?

我有一个C++模板化类//DefinitiontemplateclassMyCLass{public:typedeftypenameT::SMyS;//MyCLass::MySMyClass::operator()(constMyClass::MyS&x){...}我想要的是重载运算符operator()在MyS为double时表现不同。我考虑过专门化,但考虑到专门化应该作用于依赖类型的类型,在这种情况下该怎么做?谢谢 最佳答案 您可以将工作转发给一些私有(private)的重载函数:templateclassMyCLass{pub

c++ - 在定义处初始化模板结构

我不确定这个主题是否与我正在寻找的完全匹配,但基本上是这样的:我能做到:structsomething{intd;}somethingType;但为什么我不能这样做呢?templatestructsomethingelse{intd;}somethingelseType;如果可以做第二种,正确的做法是什么? 最佳答案 我认为你可以,在语法上,但它被额外的限制所禁止:[温度]/1Atemplatedefinesafamilyofclassesorfunctionsoranaliasforafamilyoftypes.  templat

c++ - 基于参数特征的部分模板特化

假设我有以下模板:templateunionexample{Tt;constexprexample(constT&t):t(t){};/*Werelyonowningclasstotakecare*ofdestructingtheactivemember*/~example(){};};因为那里的析构函数,example永远不会被轻易破坏(因此不是文字类型)。我喜欢像这样的部分特化templateunionexample::value,T>>{Tt;constexprexample(constT&t):t(t){};};让example当T时可以轻易破坏是,但不幸的是,这给了我(事后看

c++ - 模板类型的模板方法特化

有这样的模板类(为了理解我的观点而进行了简化):templateclassWrapper{TYPEm_tValue;voidDoSomething();};templateclassArray{TYPE*m_pArray;};是否有可能(以及如何?)专门化方法Wrapper>::DoSomething()?我的意思是,我可以将此方法专门用于int通过定义键入:templatevoidWrapper::DoSomething(){...};但我如何将其专门用于Array但保持Array不专业?当然,我可以这样写:templatevoidWrapper>::DoSomething(){..

c++ - template<> 用于成员枚举的显式特化

根据17.7.3[temp.expl.spec]第5段(N4659),...Membersofanexplicitlyspecializedclasstemplatearedefinedinthesamemannerasmembersofnormalclasses,andnotusingthetemplatesyntax.Thesameistruewhendefiningamemberofanexplicitlyspecializedmemberclass.However,templateisusedindefiningamemberofanexplicitlyspecializedm

c++ - 想要 : a C++ template idea to catch an issue, 但在编译时?

我们有一个常量结构数组,像这样:staticconstSettingsSuT_table[]={{5,1},{1,2},{1,1},etc};结构如下:size_bytes:num_items:其他“元数据”成员所以“总大小”是单个元素的size_bytes*num_items。所有这些信息都在const数组中,在编译时可用。但是,请注意,_table的总大小与EEPROM本身的大小无关。_table不镜像EEPROM,它只描述了布局、用途和我们需要的其他“元数据”类型的信息。但是,您可以使用此元数据来确定我们正在使用的EEPROM的数量。数组简单地描述了存储在外部EEPROM中的数据

c++ - 定义和调用专用模板的 C++ 函数

我目前正在深入学习C++,我遇到了一些已经难住了几个小时的东西。为什么当我创建一个模板然后对其进行专门化时,我无法为专门化版本调用或定义该函数?编译器提示,我已经在谷歌上搜索了可能的提示我做错了什么,但无济于事。我非常确定这是我忽略的非常简单的事情:templateclassC{};//specializationtotypechartemplateclassC{public:voidecho();};//compilercomplainsheretemplatevoidC::echo(){couterror:template-id‘echo’for‘voidC::echo()’doe

c++ - 错误 C2995 : function template has already been defined

此代码产生17错误C2995:函数模板已被定义;在添加#include"set.h"header之前存在一组单独的错误。有一个与此关联的私有(private).cpp和.h文件。/**File:private/set.cpp*LastmodifiedonThuJun1109:34:082009byeroberts*-----------------------------------------------------*Thisfilecontainstheimplementationoftheset.hinterface.*BecauseofthewayC++compilestemp