2015-02-26 4 views
0

У меня есть класс, чья декларация слишком раздута для одного файла заголовка. Я вставляю в него классы и структуры, чтобы укрепить их отношения, поэтому я хотел бы сохранить их вместе (в том смысле, что я должен использовать пространство имен самого внешнего класса для использования классов внутри)Объявление вложенного класса за пределами класса, в котором он находится?

Есть ли способ объявить вложенные классы из другого файла заголовка? Или, возможно, хотя бы объявить методы вложенного класса в другом заголовочном файле? (Много методов в классе является причиной заворота, число классов относительно разумной в 10)

Структура выглядит как это:

class Stage{ 
    class Quad{ 
     Quad(); 
     Quad(int width, int height); 
     // like 20 different constructors, plus methods 
    private: 
     glm::vec3 p[4]; 
    }; 
    class Line{ 
     // ... 
    }; 
    // and a bunch of other classes 

    // Stage methods 
    void draw(Quad quad); 
    void draw(Line line); 
    // ... 
}; 

Я, вероятно, следует добавить, что я не могу разверните их встроенным препроцессором, так как это испортит мой код завершения IDE, если я буду с ним креативным.

ответ

1

Есть ли способ объявить вложенные классы из другого заголовочного файла?

Нет, вложенные классы могут быть объявлены только в их определении окружающего класса.

Или, возможно, хотя бы объявить методы вложенного класса в другом файле заголовка?

Да, вы можете просто объявить вложенные классы в свой класс, а затем определить их позже.

class Stage{ 
    class Quad; 
    class Line; 
    // and a bunch of other classes 

    // Stage methods 
    void draw(Quad quad); 
    void draw(Line line); 
    // ... 
}; 

// ... later 
class Stage::Quad { 
    // stuff 
}; 

// ... later still 
class Stage::Line { 
    // whatever 
}; 
Смежные вопросы