2017-01-20 15 views
-2

C++ Я хочу, чтобы определить элемент, который указывает на тот же тип элемента, что-то вроде этого:Определить элемент, указывающий на тот же элемент типа в

#define Foo { Foo*, ..., ... } 

Например, это помогает мне создать простой дерево без создания каких-либо ДОПОЛНИТЕЛЬНОЕ класс:

#define TreeNode std::deque(std::pair(char, TreeNode*)) 

TreeNode mRootNode; 

Однако, это не может быть сделано, потому что Foo все еще не объявлена, делая ссылку на себя в своем заявлении.

Мой вопрос: почему такая же возможность допускается при ее реализации с помощью классов? Есть ли еще один простой способ, а не Object Oriented, определить мой Foo?

+5

Вы не хотите этого делать, или почти все остальное. используя макросы препроцессора в C++. –

+5

шаг один, не использовать макросы. – RyanP

+0

#define создает макрос, а не тип. Если вы попытаетесь расширить этот макрос, как показано, вы получите бесконечную саморекурсию. – zstewart

ответ

2

Определить элемент, который указывает на тот же элемент типа в С ++

Простой способ определить тип, который может ссылаться на другой объект того же типа, чтобы определить структура данных следующим образом:

struct Foo { 
    Foo* link; 
}; 

Не нужно использовать макрос.

Это разрешено, так как Foo был объявлен к моменту объявления указателя элемента. Правила языка позволяют использовать рекурсивные классы, но не рекурсивные макропроцессоры.


P.S. Чтобы прояснить некоторую путаницу в вопросе: хотя классы в C++ поддерживают объектно-ориентированные функции, вы можете не использовать эти функции, а вместо этого использовать классы так же, как использовать структуры в C.