【发布时间】:2025-12-13 10:05:02
【问题描述】:
我有这种(简化的)情况:
class Tree {
class Iterator {
class Stack {
// ...
}
public:
// ...
}
public:
//...
}
我不想弄乱类的定义,我决定只在类本身内部编写方法声明。稍后(在下面)当我想定义这样的复制赋值运算符时:
Tree::Iterator::Stack& Tree::Iterator::Stack::operator = (const Stack& p_stack) {
// ...
}
我必须处理这些讨厌的范围解决方案。我想知道是否有办法缩短它们,因为据我所知,using 和 typedef 不提供任何东西。
编辑:由于这不是 CodeReview,并且@Yulian 要求澄清,这里是简短版本:
我正在制作一个迭代的红黑树实现。提到的class Iterator 用于后序遍历(所以它是特定于后序的),class Stack 是它的实用程序类。在这个短程序中,只有class Tree使用Iterator,只有Iterator使用Stack。
在@Yulian 的提醒之后,我记得如果提到的类是单独定义的(甚至可能作为模板),它会更加面向对象,但这是一个小型的、自包含的程序,我正在努力保留它那样。
编辑:自包含也意味着它是一个独立的单文件程序,因此没有任何 .h 文件或外部代码重用。为什么? 因为 ACADEMIA(以及相关的任意限制)。
【问题讨论】:
-
为什么
using和typedef不给你买东西? -
它们是私有类,所以我不能只说
using Stack = Tree::Iterator::Stack;或类似的东西 -Iterator和Stack无法访问。 -
你可以先声明嵌套类,然后在后面定义类的时候直接定义它的成员函数。但是,我认为代码本身看起来不错。如果你还有一堆命名空间来处理inside函数定义,你实际上可以在每个函数定义中放置
using声明。 -
不嵌套类如何使它不那么小和独立?它可能与您已经使用的代码量大致相同,只是布局不同。
-
只有 Tree 类可访问,请查看 pimpl idiom。
标签: c++ scope nested-class