C++中的通用类

Fre*_*911 4 c++

我正在阅读Generic Classes主题.我一度陷入困境.以下是一段代码

template <class StackType> class stack
{
    StackType stck[10];
    int tos;
public:
    stack() {tos=0;}
    void push(StackType ob);
    StackType pop();
};
Run Code Online (Sandbox Code Playgroud)

我的问题是template <class StackType> class stack,有两个类(StackTypestack)?

我的意思是编译器如何将其视为使堆栈成为StackType的嵌套类或其他东西?

Wil*_*ode 8

它不是创建第二个类,而是创建一个Stack类型,其中StackType被用户给定的类型取代.定义它的更好方法是使用typename(§14.1.2),这样可以更清楚地了解实际情况.有关模板的更多信息,请参阅C++模板.

您所描述的是模板中的嵌套类:

template <typename Type>
class Stack
{
public:
    class InnerType
    {
    };
};
Run Code Online (Sandbox Code Playgroud)

在此示例中,InnerType是一个强名称的类Stack<Type>::InnerType,它是基于提供的类型的特定类.因此,如果代码中的某个位置创建了一个对象,如下所示:

auto x = new Stack<int>();
Run Code Online (Sandbox Code Playgroud)

然后Stack<int>::InnerType会存在一类类型.模板类仅在代码中使用时才存在于程序集中,因此如果没有实现任何变体的对象Stack,则InnerType(任何模板类型)都不存在.

此处讨论了有关声明模板的更多详细信息.