C ++中的泛型类

自由911

我正在阅读泛型类主题。我一度陷入困境。下面是一段代码

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

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

我的意思是,编译器如何将其视为使stack成为StackType或其他嵌套类?

威尔·克斯托德

它不是在创建第二个类,而是在创建一个类型为Stack的类,其中StackType被用户提供的类型所取代。定义它的更好方法是使用类型名(第14.1.2节),这使实际情况更加清楚。有关模板的更多信息,请参见C ++模板

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

template <typename Type>
class Stack
{
public:
    class InnerType
    {
    };
};

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

auto x = new Stack<int>();

那么一个类型的类Stack<int>::InnerType将存在。模板类仅在代码中使用时才存在于程序集中,因此,如果未Stack实现的任何变体,则InnerType(任何模板类型的)对象将不存在。

在SO上讨论了有关声明模板的更多详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档