为什么C++中很少使用内部类?

C++和Java都支持内部类,但C++却鲜见有内部类的使用。仔细想了一下,原因应该与模板有关。

在以上代码中,print()的定义是没有问题的,但友元operator+的定义却无法通过编译,原因在于模板函数的类型推断不适用于作用域,即无法自动推导出::左部的模板参数。要想通过编译只能像被注释掉的那样定义成内联的。

标准库中的迭代器类定义成容器类的内部类再适合不过了。但标准库的实现中迭代器类是定义在容器类的外部的,通过typedef把迭代器类型声明在了容器类中,可能就是因为以上原因(迭代器一般都需要友元函数operator+)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注