首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++模板说明

C++模板说明
EN

Stack Overflow用户
提问于 2017-04-21 14:25:41
回答 2查看 60关注 0票数 1

有人能给我解释一下关于C++模板中的“偏序”的下面几行吗?“如果与X指定的参数列表匹配的每个参数列表也与Y指定的参数列表匹配,那么模板X比模板Y更专业,但反之亦然。”

我搞不懂这句话的意思。

EN

回答 2

Stack Overflow用户

发布于 2017-04-21 19:41:57

我试着用一个例子来解释它。

请看下面的struct foo

代码语言:javascript
复制
// generic
template <typename T1, typename T2>
struct foo
 { };

// partial specialization
template <typename T2>
struct foo<int, T2>
 { };

// full specialization
template <>
struct foo<int, long>
 { };

有三个版本:通用版本、部分专门化和完全专门化。

考虑以下参数列表

代码语言:javascript
复制
1) int, long
2) int, int

并观察完全和部分专业化。

当列表(2)仅匹配部分专门化时,列表(1)匹配两个专门化( T2等于long)。

每个与完全专门化匹配的参数列表(只有列表(1))与部分专门化匹配,但存在一个与部分专门化匹配的列表(列表(2)),该列表与完全专门化不匹配。

根据您引用的内容,完全专门化比部分专门化“更专业”。

您还可以看到,部分专门化比通用版本“更专门化”,因为每个与部分专门化匹配的列表也与通用版本匹配( T1等于int),但存在一个与通用版本匹配但不匹配部分专门化的列表(例如long, int)。

也很明显,完整的专门化比通用版本更加专门化。

票数 1
EN

Stack Overflow用户

发布于 2017-04-21 19:59:20

代码语言:javascript
复制
// Y
template <typename T1, typename T2>
struct foo {};

// X
template <typename T>
struct foo<int, T> {};

“如果每个与X指定的参数列表匹配的参数列表也与Y指定的参数列表匹配,则模板X比模板Y更加专门化,但反之亦然。”

代码语言:javascript
复制
// Imagine all possible argument lists for X. They will always match Y.
foo<int, int> f1;
foo<int, double> f2;
foo<int, my_object> f3;
/* ... */

// Imagine all possible argument lists for Y. They will not always match X.
foo<double, int> f4;
foo<int, double> f5;
foo<char, my_object> f6;
/* ... */

因此,XY更加专门化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43535379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档