请在下面找到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};
答案 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是不好的习惯,这只是信息隐藏,并没有提供任何有价值的东西(例外:指针可以作为某些内部资源的句柄,并且不打算在外部任何地方取消引用-然后显式隐藏指针性质是有效的。