草庐IT

专门化

全部标签

c++ - 如何分别针对整型和浮点型专门化模板函数?

考虑函数templatevoidFun(Tt);.我怎样才能分别对整型和浮点型有不同的实现?我猜积木是std::enable_if,std::is_integral,std::is_floating_point.但我不能以一种优雅的方式将它们放在一起:-(.附言我有可用的C++11。 最佳答案 参见std::enable_if的示例代码在cppreference.com.编辑:将上面链接中的代码改编如下:#include#includetemplatetypenamestd::enable_if::value>::typefoo(T

c++ - 专门化模板类的模板成员函数?

我有一个模板类,它有一个需要专门化的模板成员函数,如:templateclassX{public:templatevoidY(){}templatevoidY(){}};虽然VC正确处理了这个问题,但显然这不是标准的,GCC提示:explicitspecializationinnon-namespacescope'classX'我试过:templateclassX{public:templatevoidY(){}};template//Alsotried`template`herevoidX::Y(){}但这导致VC和GCC都提示。正确的做法是什么? 最佳答

c++ - 如何专门化模板类成员结构

假设我有以下模板类:templateclassFoo{structstore_t{uint8_tdata[];}store;///otherstuffusingT}有没有办法构造一个专门版本的内部结构,相当于这样的东西:classFoo{structstore_t{uint16_tf1;uint16_tf2;}store;///otherstuffusingT}我宁愿让大部分“使用T的其他东西”保持非特化。不过,我会专门研究一些访问器。我觉得我想写一些类似的东西templatestructstore_t{uint16_tf1;uint16_tf2;}Foo::store;但这当然行不通

c++ - 如何在不创建空类的情况下避免专门化 "big"模板类?

鉴于以下情况:templateclassTuple{private:T0v0;T1v1;T2v2;T3v3;T4v4;public:voidf(){cout我想创建一个只有两个int的部分类-s,那么我必须像这样专门化:classNullType{};//createanemptyclasstemplateclassTuple{private:T0v0;T1v1;public:voidfunc(){cout但是这个实现需要我做:Tupleb;所以这很丑:)是否有另一种方法可以在不定义另一个(空)类的情况下实现部分特化,这样我就可以做到:Tupleb1;? 最

c++ - 根据成员容器的大小专门化成员函数

我有一个包含一些静态大小容器的类:templatestructPoint{Containercontainer;...voidbar();}Container类可能如下所示:structContainer1{staticconstexprsize_tsize=5;}现在我想根据容器的大小专门化bar方法。我不明白该怎么做。编辑:我想要一个C++11解决方案。C++14可能有效,但我们使用的编译器通常对C++14的支持参差不齐。编辑:StackDanny建议使用Clang而非GCC编译的解决方案。 最佳答案 与其特化,不如使用SFIN

c++ - 在大模板类中专门化单个方法

在C++中,如果您想部分特化模板类中的单个方法,则必须特化整个类(如Templatespecializationofasinglemethodfromtemplatedclasswithmultipletemplateparameters中所述)然而,当每个模板参数影响单个函数时,这在具有多个模板参数的较大模板类中变得令人厌烦。使用N个参数,您需要将类特化2^N次!然而,对于C++11,我认为可能有更优雅的解决方案,但我不确定如何处理它。也许以某种方式使用enable_if?有什么想法吗? 最佳答案 除了Torsten提出的基于继承

c++ - 用专门的版本覆盖多个继承的模板函数

好的,先上示例代码;这是我试图传达我正在尝试做的事情的尝试,尽管它无法编译:#includetemplateclassBase{public:virtualvoidmy_callback()=0;};classDerived1:publicBase,publicBase{public:voidmy_callback(){cout(){cout,publicBase{public:voidmy_callback(){cout(){cout*i_p=d;Base*i_f=d;i_p->my_callback();i_f->my_callback();}{Derived2d;Base*i_p

c++ - 将 `std::default_delete` 专门化为 `std::shared_ptr`

我有这样的想法:namespacestd{templateclassdefault_delete{public:voidoperator()(IplImage*ptr)const{cvReleaseImage(&ptr);}};};typedefstd::shared_ptrIplImageObj;我没有真正找到太多信息是否支持我专门化default_delete以及shared_ptr是否也默认使用default_delete。它的工作方式与Clang5.0.0的预期一致。那么,支持吗?如果STL实现有不同的内部命名空间怎么办?那它不会找到我的声明吗?但它应该会在声明中出错。

c++ - const ref lvalue to non-const func return value 是否专门减少拷贝?

我遇到了一个C++习惯,我试图研究它以了解它的影响并验证它的用法。但我似乎找不到确切的答案。std::vectorgetThings();voiddo(){conststd::vector&things=getThings();}这里我们有一些返回非const&值的函数。我看到的习惯是在分配函数的返回值时使用const&左值。提出这个习惯的原因是它减少了拷贝。现在我一直在研究RVO(返回值优化)、复制省略和C++11移动语义。我意识到给定的编译器可以选择阻止通过RVO进行复制,不管这里是否使用了const&。但是,在防止复制方面,const&左值的使用对非const&返回值有任何影响吗

c++ - 为用户定义类型的 shared_ptr 专门化标准库函数是否合法?

标准说明了以下关于从标准库中专门化模板的内容(通过Whatcanandcan'tIspecializeinthestdnamespace?)Aprogrammayaddatemplatespecializationforanystandardlibrarytemplatetonamespacestdonlyifthedeclarationdependsonauser-definedtypeandthespecializationmeetsthestandardlibraryrequirementsfortheoriginaltemplateandisnotexplicitlyprohi