首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板参数推导,不明确案例

模板参数推导,不明确案例
EN

Stack Overflow用户
提问于 2015-03-14 17:16:32
回答 3查看 63关注 0票数 0
代码语言:javascript
复制
class Copier{ };

template<class T>
class Destructor{ };

template<template<class T> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };

BuildFactory<Destructor> bd;

我不知道模板参数T将被推断为什么。我怀疑T会被推演给Copier,但这正是我的想法,我无法解释。也许有人能解释一下这个话题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-14 17:36:34

没有推论。让我们看看T存在的两个地方:

代码语言:javascript
复制
template<template<class T> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };

这说明BuildFactory是一个类模板,它本身就是一个类模板,称为Abstractor。同样需要澄清的是:Abstractor是类模板,而不是实例化。所以根本就没有推论。类Abstractor<Copier>在命名Copier时有一个显式的参数。

T实际上是不必要的;您可以编写:

代码语言:javascript
复制
template<template<class> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };

下面是其他代码:

代码语言:javascript
复制
template<class T>
class Destructor{ };

BuildFactory<Destructor> bd;

同样,您传递的是模板Destructor,而不是类Destructor<T>。不需要推理。

此外,无论如何也不可能导出类模板的模板参数。:P

票数 2
EN

Stack Overflow用户

发布于 2015-03-14 17:19:48

T没有得到任何推论。这甚至没有必要。这一守则相当于:

代码语言:javascript
复制
template<template<class> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };

这仅仅意味着Abstractor是一个类模板,也就是所谓的模板参数。

通常,可选模板“参数”用于记录应该使用的类模板的某些内容。

票数 6
EN

Stack Overflow用户

发布于 2015-03-14 17:23:16

正如以前的答案所说,这里没有推论。特别地,

  • Abstractor显式地指定为Destructor
  • BuildFactory中,Abstractor显式地与模板参数Copier一起使用。
  • BuildFactory<Destructor>中,由于AbstractorDestructor,所以显式使用Destructor<T = Copier>

因为所有的模板参数都是指定的,所以没有任何推论,甚至没有任何默认参数类型的使用。

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

https://stackoverflow.com/questions/29051826

复制
相关文章

相似问题

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