此C ++模板语句从句法和语义上下文实际上意味着什么

时间:2019-01-16 05:49:22

标签: c++ c++11 templates stl

请在下面找到C ++模板的一些用法。我无法从句法和语义上全面理解这些内容,例如, 首先声明一下,我知道:

Tiny
VerySmall
Very Small
Small
Medium
Large
VeryLarge
Very Large

然后声明它,我对此有一定的了解,需要从语法和语义的角度了解它的含义:

template <class T>
class Queue {// some other statements};

最后这句话,我再次不完全理解

template <class T>
class IntermittentQueue : Queue<T> {// some other statements};

1 个答案:

答案 0 :(得分:0)

 library(stringr)
   unlist(str_extract_all(a,regex("^M.*",ignore_case = T)))



[1] "Mom"    "mother"

这定义了一个新的模板类:

template <class T>
class IntermittentQueue : Queue<T> { /* some other statements */ };
同时从另一个继承的

,例如:

template <class T>
class IntermittentQueue { }

唯一的是,在这种情况下,基类是另一个模板类的实例:

class Base { };
class Derived : Base { };

使用派生类的template参数作为模板参数(现在我们又回到了原始代码...)。

template <typename T>
class Base { };
class Derived : Base<int> { };

这是模板类成员功能之一的实现。逐步:

template <class T>
typename IntermittentQueue<T>::Node* IntermittentQueue<T>::getNode(const node_ptr nodePtr)
{ /* some other statements */ };

到目前为止,还不错,但是返回类型可能需要进一步说明:

template <class T> // the class we are speaking off is a template class

typename IntermittentQueue<T>::Node* // return value of the function

IntermittentQueue<T>::getNode // function name with (template) class scope specified
                              // (just as with SomeClass::someMemberFunction)

 (const node_ptr nodePtr)         // function parameter(list)
 { /* some other statements */ }; // function body

该函数返回指向(模板)类typename IntermittentQueue<T>::Node* 的内部类类型Node的对象的指针:

IntermittentQueue

由于内部类型是从属类型,因此您需要 明确告诉编译器这实际上是 类型,这就是IntermittentQueue<T>::Node* 关键字然后用于;有关详细信息:该主题已经有另一个question

这里只是个小注:指针(typename的typedef是不好的习惯,这只是信息隐藏,并没有提供任何有价值的东西(例外:指针可以作为某些内部资源的句柄,并且不打算在外部任何地方取消引用-然后显式隐藏指针性质是有效的。