C++中模板参数的类继承
Posted
技术标签:
【中文标题】C++中模板参数的类继承【英文标题】:Class inheritance of template parameters in C++ 【发布时间】:2019-08-27 10:00:49 【问题描述】:我是 C++ 新手,碰巧遇到如下代码:
template<class T, class Composite> class CompositeTester: public Composite
public:
CompositeTester(T* instance, const typename Composite::Parameters& parameters) : Composite(parameters)
singletonInstances_[parameters.instanceIndex] = instance;
-
继承对我来说不是很清楚,因为继承来自模板类参数本身。这个概念叫什么?
在构造函数CompositeTester
中,我意识到Composite
的实例是使用parameters
作为参数创建的。但是这种语法很难理解const typename Composite::Parameters
。如何解释这种语法?即使在它存在之前定义一个复合类的对象是否有效?
singletonInstances_[parameters.instanceIndex] = instance
。这里是否为 parameters.instanceIndex
创建了一个新变量?除了我在此处的问题中提到的内容外,class Composite::Parameters
或 class Composite
的源代码中没有定义。
【问题讨论】:
【参考方案1】:这被称为curiously recurring template pattern。
typename
在这里用于表示依赖类型名称。没有它,编译器会将限定名称解析为非类型实体。请参阅我们的常见问题解答:Where and why do I have to put the "template" and "typename" keywords?
这在标准 C++ 中格式不正确,因为未声明 singletonInstances_
。如果在基类中声明,则需要使用this->
使其成为依赖名。
【讨论】:
我不太懂这个词:typename Composite::Parameters& parameters
。 :: 是范围解析运算符。那么parameters
是Parameters
类型的Composite
对象并且正在传递引用吗?
parameters
是对在(类)类型Composite
范围内声明的类型Parameters
的引用。 (引用不是对象,我不确定您所说的“Parameters
的对象”是什么意思)以上是关于C++中模板参数的类继承的主要内容,如果未能解决你的问题,请参考以下文章