c – 了解模板部分专业化

c – 了解模板部分专业化,第1张

概述我试图理解模板的部分特化的概念.但是我似乎把它与模板专业化混淆了.我正在考虑以下两个例子 template <typename T> struct test{ ///Some stuff};template <> //Specializationstruct test<int*>{ ///Some stuff};template<typename t> //Par 我试图理解模板的部分特化的概念.但是我似乎把它与模板专业化混淆了.我正在考虑以下两个例子

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 – 了解模板部分专业化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存