class Copier{ };
template<class T>
class Destructor{ };
template<template<class T> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };
BuildFactory<Destructor> bd;我不知道模板参数T将被推断为什么。我怀疑T会被推演给Copier,但这正是我的想法,我无法解释。也许有人能解释一下这个话题。
发布于 2015-03-14 17:36:34
没有推论。让我们看看T存在的两个地方:
template<template<class T> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };这说明BuildFactory是一个类模板,它本身就是一个类模板,称为Abstractor。同样需要澄清的是:Abstractor是类模板,而不是实例化。所以根本就没有推论。类Abstractor<Copier>在命名Copier时有一个显式的参数。
T实际上是不必要的;您可以编写:
template<template<class> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };下面是其他代码:
template<class T>
class Destructor{ };
BuildFactory<Destructor> bd;同样,您传递的是模板Destructor,而不是类Destructor<T>。不需要推理。
此外,无论如何也不可能导出类模板的模板参数。:P
发布于 2015-03-14 17:19:48
T没有得到任何推论。这甚至没有必要。这一守则相当于:
template<template<class> class Abstractor>
class BuildFactory : public Abstractor<Copier>{ };这仅仅意味着Abstractor是一个类模板,也就是所谓的模板参数。
通常,可选模板“参数”用于记录应该使用的类模板的某些内容。
发布于 2015-03-14 17:23:16
正如以前的答案所说,这里没有推论。特别地,
Abstractor显式地指定为Destructor。BuildFactory中,Abstractor显式地与模板参数Copier一起使用。BuildFactory<Destructor>中,由于Abstractor是Destructor,所以显式使用Destructor<T = Copier>。因为所有的模板参数都是指定的,所以没有任何推论,甚至没有任何默认参数类型的使用。
https://stackoverflow.com/questions/29051826
复制相似问题