在 C++ 中定义指向相同元素类型的元素
Define an element that points to a same element type in C++
我想定义一个指向相同元素类型的元素,像这样:
#define Foo { Foo*, ..., ... }
例如,这有助于我在不创建任何辅助树的情况下创建一个简单的树 class:
#define TreeNode std::deque(std::pair(char, TreeNode*))
TreeNode mRootNode;
但是,这无法做到,因为在其声明中引用自身时,Foo
仍未声明。
我的问题是...为什么在使用 classes 实现时允许使用相同的功能?有没有另一种更简单的方法,而不是面向对象的方法来定义我的 Foo
?
Define an element that points to a same element type in C++
定义可以引用同一类型的另一个对象的类型的一种简单方法是定义这样的数据结构:
struct Foo {
Foo* link;
};
不需要宏。
这是允许的,因为在声明成员指针时Foo
已经声明了。语言规则允许递归 类,但不允许递归 pre-processor 宏。
P.S。为了澄清问题中的一些混淆:虽然 C++ 中的 类 支持面向对象的功能,但您可以选择不使用这些功能,而是使用 类 就像在 C 中使用结构一样。
我想定义一个指向相同元素类型的元素,像这样:
#define Foo { Foo*, ..., ... }
例如,这有助于我在不创建任何辅助树的情况下创建一个简单的树 class:
#define TreeNode std::deque(std::pair(char, TreeNode*))
TreeNode mRootNode;
但是,这无法做到,因为在其声明中引用自身时,Foo
仍未声明。
我的问题是...为什么在使用 classes 实现时允许使用相同的功能?有没有另一种更简单的方法,而不是面向对象的方法来定义我的 Foo
?
Define an element that points to a same element type in C++
定义可以引用同一类型的另一个对象的类型的一种简单方法是定义这样的数据结构:
struct Foo {
Foo* link;
};
不需要宏。
这是允许的,因为在声明成员指针时Foo
已经声明了。语言规则允许递归 类,但不允许递归 pre-processor 宏。
P.S。为了澄清问题中的一些混淆:虽然 C++ 中的 类 支持面向对象的功能,但您可以选择不使用这些功能,而是使用 类 就像在 C 中使用结构一样。