草庐IT

专门化

全部标签

c++ - 根据模板模板参数采用的参数数量部分专门化模板的语法是什么?

考虑以下代码:templatestructOne{};templatestructTwo{};templateclassTTP,typename...>structSS;#ifdefTEST_TTPtemplateclassOneParam,typename...Ts>structSS{};templateclassTwoParam,typename...Ts>structSS{};#else//TEST_TTPtemplateclassOneParam,typenameTParam>structSS{};templateclassTwoParam,typenameTParam1,ty

C++:如何防止模板专门化指针?

如果我愚蠢到找不到如此明显的答案,我会开始道歉。我看过很多页面都在谈论为指针参数进行特定的模板特化。不过,我希望能够阻止模板专门化指针参数,但我不知道该怎么做。templatevoidfunction(Targ){//...}intmain(){inti=42;function(i);//Okfunction(&i);//Diebastartwithacompilererror!}这可能吗?谢谢。 最佳答案 你可以声明特化(在这种情况下它在技术上只是一个重载)但不定义它:)templatevoidfunction(Targ){//.

c++ - 标准库实现可以专门化标准类型吗?

例如,为了论证,我们假设找到了整数类型vector的更高效(存储、操作)实现(与通用vector实现相比)。符合标准的库可以做类似的事情吗:templateclassvector{...};templateclassvector::value>>{...};我认为这是非法的,因为有额外的模板参数。但是如果有一点编译器魔法呢:(除了额外的实现工作之外)会允许这样的事情吗:vector内部映射到classvector_integral同时vector内部映射到classvector.-这显然与标准中明确提到的特化无关,例如std::vector-特化显然具有相同的接口(interface)

C++ 模板专门化以提供额外的成员函数?

如何以非内联方式为专用模板提供额外的成员函数?即templateclasssets{voidinsert(constint&key,constT&val);};templateclasssets{voidinsert(constint&key,constbool&val);voidinsert(constint&key){insert(key,true);};};但是当我写sets::insert(constint&key)作为templateclasssets{voidinsert(constint&key,constbool&val);voidinsert(constint&key

c++ - 是否可以在专门的模板类中访问非类型模板参数的值?

是否可以在专门的模板类中访问非类型模板参数的值?如果我有专门化的模板类:templatestructA{voidf(){coutstructA{voidf(){cout我知道在上述情况下,硬编码值4和0很简单,而不是使用变量,但我有一个更大的类,我专门研究它,我希望能够访问这些值。是否可以在A中访问major和minor值(4和0)?或者我是否必须在模板实例化时将它们分配为常量:templatestructA{staticconstintmajor=4;staticconstintminor=0;...} 最佳答案 这类问题可以通过

c++ - 如何专门化 std::begin?

我正在尝试为自定义容器专门化std::begin。我这样做是因为我想对容器使用基于范围的for。这是我的:classstackiterator{…};classstack{…};#includetemplatestackiteratorstd::begin(stack&S){returnS.GetBottom();}我在begin特化的定义中遇到以下错误:Nofunctiontemplatematchesfunctiontemplatespecialization'begin'我做错了什么? 最佳答案 I'mtryingtospec

c++ - 如何专门化模板类的某些成员?

代码:templatestructA{voidf1(){};voidf2(){};};templatestructA{voidf2(){};};intmain(){Adata;data.f1();data.f2();};错误:test.cpp:Infunction'intmain()':test.cpp:16:error:'structA'hasnomembernamed'f1'基本上,我只想特化一个函数,而对其他函数使用通用定义。(在实际代码中,我有很多我不想专门化的函数)。如何做到这一点?谢谢! 最佳答案 考虑将公共(publi

c++ - 专门化成员函数时出现 "too many template-parameter-lists"错误

我想像这样在模板类中定义一些模板成员方法:templateclassCallSometing{public:voidcall(TtObj);//1sttemplatevoidcall(TtObj,AaObj);//2ndtemplatetemplatevoidcall(TtObj,AaObj,BbObj);//3rd};templatevoidCallSometing::call(TtObj){std::couttemplatevoidCallSometing::call(TtObj,AaObj){std::couttemplatetemplatevoidCallSometing::c

Swift (4) - 泛型函数能否专门针对其 init() 生成 "empty"对象的类型?

是否可以将泛型函数限制为仅init()生成空对象的类型?例如:publicfuncconstructDefaultObject()->CwhereC:SomeProtocol{returnC()}没有where子句,这会产生错误:error:numbers.playground:3:12:error:non-nominaltype'C'doesnotsupportexplicitinitializationreturnC()^~~如果我改用C.init()会出现类似的错误:error:numbers.playground:3:12:error:type'C'hasnomember'in

当专门化类型受附加协议(protocol)约束时,Swift 无法专门化泛型参数

想象一下以下场景:classFood{}protocolGrowable{}classAnimal{}letanimal1=Animal()//Okletanimal2=Animal()//Compileerror:'Animal'requiresthat'Food&Growable'inheritfrom'Food'很明显,如果我们有一个Food&Growable类型的变量,那么这个变量也是Food类型的。然而,Animal类的通用参数T不能专门用于Food&Growable类型。这是为什么? 最佳答案 错误信息有点奇怪,但是你试