template <typename T> struct test{ ///Some stuff};template <> //Specializationstruct test<int*>{ ///Some stuff};template<typename t> //Partial specializationstruct test<t*>{ ///Some stuff};
我正在尝试以下方面
test<int*> s;
这会调用专门的模板.我怎样才能调用部分专业课程.有人可以用一个例子解释部分模板和专用模板之间的区别吗?
更新:
在完成答案后,我意识到只有当参数的一个子集需要专门化时,部分模板专业化才能提供帮助.所以我尝试过这样的事情
template <>struct test<int*>{};//Partial Specializedtemplate<typename t>struct test<t,std::string>{};test<int*,std::string> s; //Error : Too many arguments for class template
这是为什么 ?
解决方法 简而言之,在谈论类模板时:> Explicit (Full) Specialization :指定了所有模板参数
> Partial specialization :通过仅指定模板参数的子集来自定义模板
所有3个案例的例子:
#include <iostream>template<typename T,typename U> //Primary templatestruct test{ voID foo() { std::cout << "\nPrimary"; }};template <typename T> //Specializationstruct test<T,int*>{ voID foo() { std::cout << "\nPartial Specialization"; }};template<> //Full specializationstruct test<int*,int*>{ voID foo() { std::cout << "\nFull Specialization"; }};int main(){ test<int,double> t1; t1.foo(); test<double,int*> t2; t2.foo(); test<int*,int*> t3; t3.foo();}
输出:
Primary
Partial Specialization
Full Specialization
Live demo.
要回答您的更新:
>模板特化无法添加参数,它只能专门化现有参数
总结以上是内存溢出为你收集整理的c – 了解模板部分专业化全部内容,希望文章能够帮你解决c – 了解模板部分专业化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)