Как создать внутренний класс, не помещая определение внутреннего класса в родительский класс? - PullRequest
5 голосов
/ 01 января 2012

Я напишу файл заголовка, и он очень длинный. Так как он будет слишком сложным, я не хочу помещать определение внутреннего класса в корневой класс. Я имею в виду, как я могу сделать класс внутренним, не записывая его в корневой класс.

class outer
{

}

class inner
{

}

Если я смогу так использовать, я думаю, что заголовочный файл будет более понятным.

Ответы [ 2 ]

16 голосов
/ 01 января 2012

Как это:

// foo.hpp

class Foo
{
public:
  class Inner;
  Foo();
  void bar();
  Inner zoo();
};

// foo_inner.hpp

#include "foo.hpp"

class Foo::Inner
{
  void func();
};

Затем в реализации:

#include "foo.hpp"
#include "foo_inner.hpp"

void Foo::bar() { /* ... */ }
void Foo::Inner::func() { /* ... */ }

Обратите внимание, что вы можете использовать неполный тип Foo::Inner внутри определения класса Foo (т. Е. В foo.hpp) с учетом обычных ограничений для неполных типов, например, Inner может отображаться как тип возвращаемого значения функции, аргумент функции, ссылка или указатель. Пока реализации функций-членов для класса Foo могут видеть определение класса Foo::Inner (включая foo_inner.hpp), все в порядке.

1 голос
/ 01 января 2012

Вы можете указать 'external' как "public class external" и поместить его определение и определение "inner" в файл "class.java", а код в external может создать экземпляр внутреннего так же, как если бы inner был в другой исходный файл. Непонятно, чего вы добиваетесь, потому что вы не объяснили, почему вы хотите «внутренний» класс.

...